【问题标题】:Nginx rewrite properly quoted ampersand in values causing problemNginx 重写正确引用的 & 值导致问题
【发布时间】:2011-08-08 22:25:08
【问题描述】:

我正在尝试使用以下 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 一样访问它,它工作正常。

我错过了什么吗?

谢谢。

【问题讨论】:

  • 我对 apache 的 mod_rewrite 也有类似的问题。我认为在处理重写规则之前已经完成了一些 url 解码。最后,我不得不将原始 URL 传递给 PHP,并直接解析 $_SERVER['REQUEST_URI']

标签: url-rewriting nginx


【解决方案1】:

将您要重写的 URL 放到另一个“位置”可以解决您的问题。 (我想在 location 指令中 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
}

至少它对我有用(在我的情况下,甚至问号都被替换为“%3f”。 摘自官方文档“请注意,$args 变量未解码,这与位置匹配期间的 URI 不同。” http://wiki.nginx.org/HttpRewriteModule

【讨论】:

    【解决方案2】:

    我注意到我使用的是旧版本的 nginx(7.6),通过升级到最新的稳定版本 (1.0) 解决了问题。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2013-04-03
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      相关资源
      最近更新 更多