NGINX:将URI路径转换为查询字符串

时间:2020-01-03 20:18:40

标签: nginx nginx-location

我的目标是将Nginx服务器的所有非/请求都转换为/?data={uri-path}

我正在尝试以下配置:

server {
        server_name example.com;
        listen 80;

        location = / {
                proxy_set_header   X-Forwarded-For $remote_addr;
                proxy_set_header   Host $http_host;

                alias /home/....;
                expires $expires;
        }

        location / {
                return 301 http://example.com/?data=$request_uri;
        }
}

问题是我以这样的URI结尾:http://example.com/?data=?data=?data=?data=?data=?data=

浏览器抱怨很多重定向。

根据文档,location =应该具有优先权,但似乎我做错了事。

感谢您的反馈。

1 个答案:

答案 0 :(得分:0)

这取决于location = /的工作。

如果它指向一个目录,并且该目录包含一个index.html文件,则Nginx将在内部重写URI,然后搜索location来处理该修改后的请求。 这将导致重定向循环。

您可以通过添加另一个location块来处理最终URI来打破循环,例如:

location = /index.html { root ...; }

如果location = /块用于代理请求,则您缺少proxy_pass语句。