我有一个这种类型的 URL:
http://www.example.com/?param1=val1¶m2=¶m3=val3¶m4=val4¶m5=val5
我想将其重定向到这个:
http://www.example.com/newparam/val3/val4
因此我尝试了这个重写规则,但没有成功:
rewrite "/?param1=val1¶m2=¶m3=(.+)¶m4=(.+)¶m5=(.+)" http://www.example.com/newparam/$1/$2 redirect;
nginx 不能处理查询参数吗?
编辑:我不想重写所有请愿书。我只需要重写那个 URL,而不会影响其他的。
答案1
好的,感谢 rzab 的初步帮助,我已将他的规则重新定义为这个可行的解决方案:
location / {
if ($args ~* "/?param1=val1¶m2=¶m3=[0-9]+¶m4=.+¶m5=[0-9]+") {
rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
}
}
我只是添加了一个条件来避免无限递归,并在规则末尾添加了一个?以摆脱初始参数。它运行完美 :)
答案2
位置 = / { 重写 ^ http://www.example.com/newparam/$arg_param3/$arg_param4; }