Nginx重写变量有点过/混乱

时间:2014-12-09 03:54:47

标签: php mod-rewrite nginx

我的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"片段。

0 个答案:

没有答案