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

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.


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;

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.