Php Nginx重写变量有点不正确/混乱
我的Nginx conf文件有一个奇怪的问题。我让它通过@rewrite重写某些路径,而其他所有错误都会转到控制器PHP脚本。主要用于正确处理不存在的/index.php重定向。请求变量也被传递。但是,在下面的示例中,第一个变量始终是q 从我的conf文件:Php Nginx重写变量有点不正确/混乱,php,mod-rewrite,nginx,Php,Mod Rewrite,Nginx,我的Nginx conf文件有一个奇怪的问题。我让它通过@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
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的url并在PHP中检查请求变量时,我得到了:
q=/?var1=1
var2=2
由于重写,我可以看到这是如何发生的,但是尝试各种其他示例,删除此方法的变量和排列并没有帮助。我的问题是,有没有一种方法可以保留这种设置,对某些路径使用重写,对其他所有路径使用错误,并同时传递所有请求变量,而不仅仅是第一个请求之后的变量
编辑:修复了这个问题
我没有将错误页面指向/error.html,而是将它指向控制器文件,通过正确传递所有变量,问题似乎得到了解决
error_page 403 404 500 502 503 504 = /path/to/controller.php?q=$request_uri;
不需要该位置=/error.html代码段 您认为q包含/?var1=1,而不是/?var1=1&var2=2有问题吗?很抱歉没有澄清。我的问题是第一个get变量总是不存在。不是游戏破坏者,但也不方便。例如,如果我通过了一个GET var,我将无法检索它。第二个变量和其他变量通过得很好。这是因为在error.html块中有奇怪的重写。它的作用是什么?这样错误就会被重定向到PHP页面。我可以把“try_files$uri$uri/@rewrites;”在错误重定向中,但这似乎没有将任何变量转发到@rewrites.main,我没有在根目录中使用index.php页面,因此我通过转发错误来解决这个问题。