Url rewriting Nginx重写导致问题的值中正确引用的符号和

Url rewriting Nginx重写导致问题的值中正确引用的符号和,url-rewriting,nginx,Url Rewriting,Nginx,我正在尝试按照nginx重写规则重写一些url rewrite ^/some\/url\/(.*)\/$ /some/url/?filter=$1; 如果查询包含&,则重写似乎不起作用 ?filter=key:abcd & efgh 这是我正确引用的 ?filter=abcd%20%26%20N%20efgh 我的问题只是重写了url/som/url/key:abcd%20%26%20N%20efgh不起作用。如果我像/some/url/?filter=abcd%20%26%20N

我正在尝试按照nginx重写规则重写一些url

rewrite ^/some\/url\/(.*)\/$ /some/url/?filter=$1;
如果查询包含
&
,则重写似乎不起作用

?filter=key:abcd & efgh
这是我正确引用的

?filter=abcd%20%26%20N%20efgh
我的问题只是重写了url
/som/url/key:abcd%20%26%20N%20efgh
不起作用。如果我像
/some/url/?filter=abcd%20%26%20N%20efgh
那样访问它,它工作正常

我错过什么了吗


谢谢。

将要重写的URL放到另一个“位置”可以解决您的问题。 (我假设位置指令nginx中没有任何转义) 因此,对于您的示例,它将是:

location /some/url/ {
 if ($uri ~* ^/some/url/(.*)$
 {
   rewrite ^.*$ /some/url/?filter=$1 break;
 }
 proxy_pass              http://127.0.0.1:8080;
 #proxy_set... <- and other proxy related things
}
location/some/url/{
如果($uri~*^/some/url/(*))$
{
重写^.*$/some/url/?filter=$1中断;
}
代理通行证http://127.0.0.1:8080;

#proxy_set…我注意到我使用的是一个旧版本的nginx(7.6),通过升级到最新的稳定版本(1.0)解决了这个问题.

我在apache的mod_rewrite中也遇到了类似的问题。我认为在处理重写规则之前需要进行一些url解码。最后,我必须将原始url传递给PHP,并直接解析
$\u服务器['REQUEST_URI']