Nginx Rewrite Convert querystring to Path


11

この単純な書き換えルールが好きです:

/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を取得しています

(より単純なルールで問題なく動作します。)

ありがとう

回答:


12

リダイレクトしたい場合

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

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


おかげで、リダイレクトは機能しますが、パラメーター($ 1)なしで...空白です
-YardenST

回答を更新しました。
ヴァレリーヴィクト

32

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;

あなたが以前にそれを投稿していたことを願っています:)それは私をいくつかの時間を節約するだろう
-YardenST

笑。そのようなルールはたくさんありましたか?まあ、決して遅くないほうがいい!また、受け入れてもらえますか?:)
cnst

ヴァレリーソリューションの
要点

9
meta.stackexchange.com/questions/5234/… « あなたのために働く以外に、答えは本当に良い習慣であることを確認してください。答えが受け入れられた後、別の人が入って来て、前の人が実際に悪いハックだったという事実を明らかにすることがあります。»真剣に、Valeryの答えには1つだけではなく、いくつかの異なる問題があります。中括弧以外のすべての行は本質的に間違っています!
cnst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.