Siapa pun yang menemukan ini online dan mencoba menyalin-menempelkan jawaban yang disarankan, berhati-hatilah jika Anda menggunakan pengaturan Virtualbox dengan port khusus. Saya harus mengubahnya menjadi misalnya di rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;mana 4321 adalah port eksternal dari Virtualbox'd nginx terhubung dengan browser saya.
aexl
Jawaban:
6
Saya ingin menyarankan pendekatan ini:
# remove multiple sequences of forward slashes
# rewrite URI has duplicate slashes already removed by Nginx (merge_slashes on), just need to rewrite back to current location
# note: the use of "^[^?]*?" avoids matches in querystring portion which would cause an infinite redirect loop
if ($request_uri ~ "^[^?]*?//") {
rewrite "^" $scheme://$host$uri permanent;
}
Ia menggunakan perilaku default nginx - penggabungan garis miring, jadi kami tidak perlu mengganti garis miring, kami cukup mengarahkan ulang
'merge_slashes off' tidak membuat perbedaan dan tidak menghasilkan perubahan.
Anup Nair
1
Kenapa tidak merge_slashes on;bekerja saja? Apakah nginx buggy?
Jonathan
1
@ Jonathan - Saya baru saja menemukan ini juga. Pemahaman saya, itu merge_slashes ontidak melakukan apa yang Anda pikirkan. Ini pada dasarnya memberitahu nginx untuk mengambil // dan / dan /// sebagai tebasan tunggal (tidak untuk menggabungkan dan mengarahkan sendiri)
Andrew Newby
1
Saya berbicara dari pengalaman menjalankan beberapa server produksi dan server dev untuk sebuah tim. Jangan lakukan ini di nginx. Sebagai gantinya, gunakan router Anda di dalam server aplikasi Anda (JS / PHP dll).
Nginx tidak dapat diandalkan untuk pekerjaan substantif. Misalnya, pengalihan, penulisan ulang, dan ifklausa adalah non-deterministik jika Anda mengubah pengaturan untuk menggunakan SSL, proxy terbalik, port tersembunyi, dan sebagainya. Jadi Anda bisa membuatnya bekerja dengan benar di satu lingkungan, tetapi bisa mustahil untuk bekerja di lingkungan lain.
Tetap menggunakan bahasa pemrograman yang tepat untuk memecahkan masalah, bahkan sesederhana menggabungkan garis miring ganda. Anda akan berterima kasih kepada saya nanti.
Sementara saya menyetujui pandangan Anda, saya percaya kita harus memberi orang pilihan untuk membentuk pendapat mereka sendiri tentang masalah ini. Saya lebih suka Apache daripada Nginx, dengan alasan yang sama dari Anda. Catatan, Apache mod_rewrite dapat dianggap sebagai bahasa pemrograman yang sederhana juga. :-)
rewrite (.*)//+(.*) $scheme://$host:4321$1/$2 permanent;
mana 4321 adalah port eksternal dari Virtualbox'd nginx terhubung dengan browser saya.Jawaban:
Saya ingin menyarankan pendekatan ini:
Ia menggunakan perilaku default nginx - penggabungan garis miring, jadi kami tidak perlu mengganti garis miring, kami cukup mengarahkan ulang
ditemukan di sini
sumber
proxy_pass
Saya menemukan respons kwo untuk tidak bekerja. Melihat log debug saya, inilah yang terjadi:
Saya menemukan ini bekerja untuk saya:
Ref: http://rosslawley.co.uk/archive/old/2010/01/10/nginx-how-to-url-cleaning-removing/
sumber
Coba ini:
Mungkin ada beberapa pengalihan untuk garis miring> 3 atau beberapa kelompok garis miring.
sumber
merge_slashes on;
bekerja saja? Apakah nginx buggy?merge_slashes on
tidak melakukan apa yang Anda pikirkan. Ini pada dasarnya memberitahu nginx untuk mengambil // dan / dan /// sebagai tebasan tunggal (tidak untuk menggabungkan dan mengarahkan sendiri)Saya berbicara dari pengalaman menjalankan beberapa server produksi dan server dev untuk sebuah tim. Jangan lakukan ini di nginx. Sebagai gantinya, gunakan router Anda di dalam server aplikasi Anda (JS / PHP dll).
Nginx tidak dapat diandalkan untuk pekerjaan substantif. Misalnya, pengalihan, penulisan ulang, dan
if
klausa adalah non-deterministik jika Anda mengubah pengaturan untuk menggunakan SSL, proxy terbalik, port tersembunyi, dan sebagainya. Jadi Anda bisa membuatnya bekerja dengan benar di satu lingkungan, tetapi bisa mustahil untuk bekerja di lingkungan lain.Tetap menggunakan bahasa pemrograman yang tepat untuk memecahkan masalah, bahkan sesederhana menggabungkan garis miring ganda. Anda akan berterima kasih kepada saya nanti.
sumber
Saya suka solusi ini:
Lihat https://stackoverflow.com/a/27071557/548473
sumber
URL example.com//dir1////dir2///dir3 dan lainnya. Coba ini berfungsi untuk saya
merge_slash off; lokasi ~ ^ (. *?) // + (. *?) $ {return 301 $ 1 / $ 2; }
sumber