NGINX hashbang重写

kyl*_*mac 8 regex hash rewrite nginx

我想知道hashbang(#!)url的位置或重写nginx指令是什么样的.基本上通过像前端控制器一样的hashbang路由所有非哈希的网址.所以:

http://example.com/about/staff
Run Code Online (Sandbox Code Playgroud)

会路由到

http://example.com/#!/about/staff
Run Code Online (Sandbox Code Playgroud)

我不清楚这里最好的技术是什么?是否编写if语句来检查hashbang的存在,或者只是编写一个过滤所有请求的泛型重写...

jay*_*oby 11

片段标识符的GET不会/不应该(某些错误的客户端可能会发送它们)出现在HTTP请求中,因此无论Web服务器如何,您都无法使用重写规则来匹配它们.

HTTP引擎无法对其做出任何假设.服务器甚至没有给它.

如果您尝试将/ redirect的初始请求发送到/#!而不是提供根索引,你最终会出现"太多的重定向"错误,因为客户端会再次请求/(请记住它不会发送#及其请求).您需要使用javascript代替索引文档.

底线是它在GET请求中不可用于服务器端.即使卷曲已被修补,不再发送它.

您可以使用nginx位置指令使其他所有内容都击中前端控制器:

 location = / {
  }      

  location = /index.html {
  }      

  location ~ / {
    rewrite ^ /#!$uri redirect;
    break;
  }
Run Code Online (Sandbox Code Playgroud)

但要注意这种方法; http://jenitennison.com/blog/node/154详细介绍了Gawker的hashbang崩溃及其使用的其他问题.