web-dev-qa-db-ja.com

nginxはパラメータ付きのURLに書き換えます

このタイプのURLがあります。

http://www.example.com/?param1=val1&param2=&param3=val3&param4=val4&param5=val5

そして、私はそれをこれにリダイレクトしたいと思います:

http://www.example.com/newparam/val3/val4

だから私は成功せずにこの書き換えルールを試しました:

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

Nginxはクエリパラメータを処理できませんか?

編集:すべての請願書を書き直したくありません。他のユーザーに影響を与えることなく、そのURLを書き換えるだけで済みます。

16
David Morales

さて、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;
    }
}

無限の再帰を回避するための条件を追加しました。ルールの最後に initial params を削除します。それは完全に動作します:)

15
David Morales
 location =/{
 rewrite ^ http://www.example.com/newparam/$arg_param3/$arg_param4;
}
4
rzab