このタイプの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を書き換えるだけで済みます。
さて、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;
}
}
無限の再帰を回避するための条件を追加しました。ルールの最後に initial params を削除します。それは完全に動作します:)
location =/{ rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4; }