web-dev-qa-db-ja.com

Nginx Rewriteクエリ文字列をパスに変換

私はこの簡単な書き換えルールを望んでいます:

/somefolder/mypage.aspx?myid=4343&tab=overview

リダイレクトされる:

/folder/4343/overview/

私はいくつかの解決策を探しましたが、実際にはうまくいきませんでした。

私は試した:

rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

そして

rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

何が悪いのですか? 404になりました

(単純なルールはうまく機能します。)

ありがとう

11
YardenST

リダイレクトしたい場合

location ~ /somefolder/mypage.aspx {
    if ($args ~* "^myid=(\d+)&tab=overview") {
        set $mid $1;
        set $args '';
        rewrite ^.*$ /folder/$mid/overview permanent;
    }
}

/ folder/$ 1/overviewの場所を設定することを忘れないでください。

12

Valery Viktorovskyの回答のより短くより正確なバージョン。

location = /somefolder/mypage.aspx {
    if ($arg_tab != overview) { return 404; }
    if ($arg_myid !~ "^\d+$") { return 404; }
    rewrite ^ /folder/$arg_myid/overview? permanent;
}

または、引数を検証する必要がない場合は、さらに短くすることもできます。

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
32
cnst