nginx menulis ulang menambahkan parameter di akhir url


13

Saya perlu mengonfigurasi proxy terbalik saya sehingga parameter berikut akan ditambahkan di akhir url: &locale=de-de

Ini hampir berhasil:

rewrite ^(.*)$ $1&locale=de-de break;

Namun, masalahnya adalah saya harus menambahkan '& locale = de-de' hanya jika belum ada dan jika ada '?' di url ...

Bisakah saya mendapatkan bantuan dalam merumuskan regex yang benar untuk melakukan ini?

Pertanyaan lain: Mengapa tanda tanya di url saya tidak ditampilkan jika saya menggunakan ini:
$ uri? $ Args

Atau $ uri $ is_args $ args menerjemahkan url yang tidak disandikan dan tanda tanya ditampilkan sebagai% 3f.

Ide ide?

EDIT: Tampaknya perilaku ini ada saat menggunakan dalam kombinasi dengan proxy_pass. Dalam penulisan ulang sederhana itu berfungsi dengan sangat baik.

Jawaban:


15
  1. Di dalam rewritekamu cocok dengan bagian jalur URL saja. Yang berarti, $1tidak akan berisi string kueri.
  2. Secara default, Nginx menambahkan string kueri asli ke penggantian penulisan ulang.

Jadi, aman untuk menulis

rewrite ^(.*)$ $1?locale=de-de break;

Jika Anda tidak ingin Nginx menambahkan string kueri asli, cukup tentukan ?di akhir URL pengganti:

rewrite ^(.*)$ $1?locale=de-de? break;

Terima kasih! Saya tidak melihat bahwa saya mencoba melakukannya dengan cara yang salah.
Sascha

A + ini adalah jawaban terbaik
Terima kasih


3

Tidak rewritemengubah parameter permintaan, hanya bagian jalur URI. Dalam pengalaman saya, mengotak-atik penulisan ulang mengarah ke siklus aneh, di mana parameter baru akan ditambahkan ad infinitum. Menulis ulang mungkin bukan cara untuk melakukan ini di Nginx.

Sebagai gantinya, Anda harus memodifikasi $argsvariabel menggunakan setarahan:

set $args $args&locale=de-de;

Saya tidak setuju bahwa $argsharus dimutasi. Sebagai gantinya, lihat solusi @ AlexanderAzarov.
Terima kasih
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.