我想知道hashbang(#!)url的位置或重写nginx指令是什么样子。基本上像一个前端 Controller 一样,通过hashbang路由所有非哈希链接的url。所以:
http://example.com/about/staff
将路由到
http://example.com/#!/about/staff
我不清楚这里最好的技术是什么?无论是编写if语句来检查hashbang的存在,还是只编写可过滤所有请求的通用重写...
最佳答案
片段标识符的GET不会/不应(某些 buggy 客户端可能会将其发送)出现在HTTP请求中,因此,无论Web服务器如何,都无法具有匹配它们的重写规则。
如果您尝试对/进行初始请求/重定向到/#!而不是提供根索引,您最终会遇到“重定向过多”的错误,因为客户端将再次要求/(请记住,它不会随请求一起发送#)。 您需要使用javascript来完成此操作,而不是使用索引文档。
最重要的是,它在GET请求中在服务器端不可用。甚至curl has been patched也不再发送它。
您可以使用nginx location指令来使其他所有内容到达前端 Controller :
location = / {
}
location = /index.html {
}
location ~ / {
rewrite ^ /#!$uri redirect;
break;
}
但是要当心这种方法; http://jenitennison.com/blog/node/154详细介绍了Gawker上的hashbang崩溃以及有关其使用的其他问题。
关于regex - NGINX hashbang重写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5380108/