Nginx Menulis Ulang Mengkonversi Querystring ke Path

11

Saya akan menyukai aturan penulisan ulang sederhana ini:

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

untuk diarahkan ke:

/folder/4343/overview/

Saya mencari beberapa solusi dan tidak ada yang benar-benar berfungsi ..

Saya mencoba:

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

dan

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

Apa yang saya lakukan salah? Saya mendapatkan 404

(Aturan sederhana berfungsi dengan baik ..)

Terima kasih

YardenST
sumber

Jawaban:

12

Jika Anda ingin mengarahkan ulang

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

Jangan lupa untuk mengkonfigurasi / folder / $ 1 / lokasi ikhtisar.

Valery Viktorovsky
sumber
Terima kasih, pengalihan berfungsi, tetapi tanpa paramater ($ 1) ... kosong
YardenST
Saya memperbarui jawaban.
Valery Viktorovsky
32

Versi Valery Viktorovsky jawaban yang lebih pendek dan lebih benar.

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

Atau, hei, bahkan bisa lebih pendek, jika Anda tidak perlu memverifikasi argumen:

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;
cnst
sumber
berharap Anda telah diposting sebelumnya :) itu akan menghemat waktu
YardenST
lol. apakah kamu punya banyak aturan seperti itu? Lebih baik terlambat dari pada tidak sama sekali! juga, bisakah saya menerima penerimaan? :)
cnst
Solusi Valery bekerja dengan sangat baik :) dan hanya ada satu jawaban :)
YardenST
9
meta.stackexchange.com/questions/5234/... « Pastikan bahwa selain bekerja untuk Anda, jawabannya adalah praktik yang sangat bagus. Kadang-kadang setelah jawaban diterima, yang lain masuk, mengungkap fakta bahwa yang sebelumnya sebenarnya adalah hack yang buruk. »Serius, tidak hanya ada satu, tetapi beberapa masalah berbeda dengan jawaban Valery! Setiap baris pada dasarnya salah, selain dari kurung kurawal!
cnst