从 nginx 中的 $args 中删除查询字符串参数的“?xx=yy”部分

从 nginx 中的 $args 中删除查询字符串参数的“?xx=yy”部分

我是一名开发人员,几乎不懂 *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 错误。

相关内容