nginx 重写带有参数的 url

Dav*_*les 20 rewrite configuration nginx redirect

我有一个这种类型的网址:

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5
Run Code Online (Sandbox Code Playgroud)

我想将它重定向到这个:

http://www.example.com/newparam/val3/val4
Run Code Online (Sandbox Code Playgroud)

所以我尝试了这个重写规则但没有成功:

rewrite "/?param1=val1&param2=&param3=(.+)&param4=(.+)&param5=(.+)" http://www.example.com/newparam/$1/$2 redirect;
Run Code Online (Sandbox Code Playgroud)

nginx 不能处理查询参数吗?

编辑:我不想重写所有请愿书。我只需要重写那个 URL,而不影响其他 URL。

Dav*_*les 19

好的,感谢 rzab 的初步帮助,我将他的规则重新定义为这个工作解决方案:

location / {
    if ($args ~* "/?param1=val1&param2=&param3=[0-9]+&param4=.+&param5=[0-9]+") {
        rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4? last;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是添加了一个条件来避免无限递归,而 ? 在规则的末尾去掉初始 params。它完美地工作:)


小智 5

位置 = / {
  重写 ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}