Redirect 使用“重定向规则”+&引用;在字符串中不起作用

Redirect 使用“重定向规则”+&引用;在字符串中不起作用,redirect,nginx,Redirect,Nginx,我正在使用Nginx,并在.conf中为站点设置了一些重定向规则,例如 if ($query_string ~ "Search=shelving"){ rewrite .*$ /shelving.html? redirect; } 因此,任何带有“Search=shelving”的url都将重定向到/shelving.html 这很好,但是我有其他的规则,字符串中有+,这些规则不起作用 if ($query_string ~ "Search=metal+shelving"){ rewrite

我正在使用
Nginx
,并在
.conf
中为站点设置了一些重定向规则,例如

if ($query_string ~ "Search=shelving"){ rewrite .*$ /shelving.html? redirect; }
因此,任何带有
“Search=shelving”
的url都将重定向到
/shelving.html

这很好,但是我有其他的规则,字符串中有+,这些规则不起作用

if ($query_string ~ "Search=metal+shelving"){ rewrite .*$ /shelving.html? redirect; }
这不起作用,而且我认为+正在破坏它,这周围还有其他原因吗

谢谢

编辑:

我希望重定向的url示例如下:


我会这样写:

map $arg_search $redirect_url {
  default "";
  "metal shelving" /shelving.html;
  "metal+shelving" /shelving.html;
  "metal%2bshelving" /shelving.html;
  "metal%2Bshelving" /shelving.html;
}

server {
  ...
  if ($redirect_url) {
    return 301 $redirect_url;
  }
  ...
}

只是为了涵盖所有可能的url编码。

您应该像这样更新nginx规则

if ($query_string ~ "Search=metal\+shelving"){ rewrite .*$ /shelving.html? redirect; }

我猜它的url编码为
%2B
。无论如何,如果它是查询参数,最好使用
$arg\u Search
变量。谢谢你的评论Alexey,你能给我一些关于
$arg\u Search
变量的更多信息吗?感谢Nginx自动为查询参数创建变量。例如,对于请求
/?a=1&hello=2
有变量
$arg\u a
$arg\u hello
。我尝试像在本例中那样使用$arg,但仍然不起作用,我认为+仍然是一个问题。您拥有什么请求url以及需要如何处理它?
“metal+shelving”/shelving.html本身就足以让它工作。唯一的问题是,我有100个这样的重定向要做,而其他重定向要在1000秒内完成,我已经将这些重定向分离到一个不同的文件中,该文件包含在main.conf中(只是为了保持干净)。但我现在有足够的钱让它发挥作用。感谢您的帮助谢谢harshad,这也很有效,但要简单得多(我在重定向文件中要做的编辑要少很多)