我是一名开发人员,几乎不懂 *nix 技能。在谷歌搜索了几个小时后,我来到这里,希望能找到这个问题的解决方案:
我有一个简单的网站设置如下:
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 应用程序,可以监听此类路线)
问题是,每当我得到一条包含?参数=值最后我得到了 404 页面。所有其他嵌套路由均正确转发(即:example.com/path1/path2/path3
转到example.com/index.html/path1/path2/path3
)。
有什么办法可以帮我摆脱困境吗?
答案1
你有$args
插入了不适当的位置。如所示这个文件,$args
(相当于$query_string
)包含?
分隔符后面的所有内容。$uri
包含包括路径信息在内的所有内容。
try_files
通过将提供的元素与文件名连接起来来检查文件名是否存在root
。因此,您可能应该使用:
try_files $uri $uri/ /index.html?path=$uri;
最后一个元素应该是默认 URI(例如/index.html
)或错误操作(例如=404
),而不是两个都。 看这个文件了解详情。
除了使用参数之外,我不熟悉如何将路径信息发送到 HTML 文件。index.php$uri
工作正常,但index.html$uri
只会产生 500 错误。