Php Nginx重写变量有点不正确/混乱

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

我的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=$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页面,因此我通过转发错误来解决这个问题。