我的Nginx配置文件存在奇怪的问题。我让它通过@rewrite重写某些路径,其他所有(所有错误)都转到控制器PHP脚本。主要是处理不存在的" /index.php"重定向正确。请求变量也通过。但是,第一个变量总是" q"在下面的例子中。
来自我的conf文件:
error_page 403 404 500 502 503 504 = /error.html;
location = /error.html {
rewrite ^(.*)$ /path/to/controller.php?q=$request_uri;
}
location / {
try_files $uri $uri/ @rewrites;
}
location @rewrites {
rewrite ^/example1/([A-Za-z0-9/.-]+)/ /path/script1.php?var=$1 last;
rewrite ^/example2/([A-Za-z0-9/.-]+)/ /path/script2.php?var=$1 last;
rewrite ^/example3/([A-Za-z0-9/.-]+)/ /path/script3.php?var=$1 last;
}
所以当我有一个像//domain.com/?var1=1&var2=2这样的网址并在PHP中检查请求变量时,我会回来:
q = /?var1 = 1
var2 = 2
我可以看到由于重写会发生这种情况,但尝试各种其他示例,删除此方法的变量和排列并没有帮助。我的问题是,有没有办法保留这个设置,使用某些路径的重写,其他所有的错误,并同时传递所有请求变量(而不仅仅是第一个之后的变量)?
修改:解决了问题
而不是将错误页面指向/error.html我只是将其指向控制器文件,问题似乎得到解决(正确传递所有变量)。
error_page 403 404 500 502 503 504 = /path/to/controller.php?q=$request_uri;
不需要" location = /error.html"片段。