开发人员在这里,接近零* nix能力。 谷歌search几个小时后,我最终在这里希望find解决这个问题的方法:
我有一个简单的网站设置像这样:
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /data/www/example.com; server_name example.com; location / { index index.html$args; try_files $uri$args $uri$args/ $uri/ /index.html$args =404; } }
我需要nginx来转发路由
example.com/path1/path2/path3?param=value
至
example.com/index.html/path1/path2/path3
(我有一个angularJS应用程序,它倾听这种路线)
问题是,每当我得到一个path,其中包括一个?param =值在最后我得到了404页面。 所有其他嵌套的路由转发正确(即: example.com/path1/path2/path3去example.com/index.html/path1/path2/path3 )。
任何想法让我摆脱困境?
你有$args插入不适当的地方。 正如本文所指出的那样, $args (相当于$query_string )包含了下面的所有内容? 分隔器。 $uri包含了一切,包括pathinfo。
try_files通过连接root和提供的元素来检查是否存在文件名。 所以你应该使用:
try_files $uri $uri/ /index.html?path=$uri;
最后一个元素应该是一个默认的URI(比如/index.html )或者一个错误操作(比如=404 ),而不是两个 。 详情请参阅此文件 。
我不熟悉将pathinfo发送到HTML文件,而不是使用参数。 index.php$uri工作正常,但index.html$uri只会产生一个500错误。