nginx yeniden yazma, bir URL'nin sonuna parametre ekle


13

Aşağıdaki parametre url sonunda eklenecek şekilde benim ters proxy yapılandırmanız gerekir: &locale=de-de

Bu neredeyse işe yarıyor:

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

Ancak, sorun zaten orada değilse ve bir '?' Varsa '& locale = de-de' eklemem gerektiğidir. url'de ...

Bunu yapmak için doğru regex'in formüle edilmesinde yardım alabilir miyim?

Başka bir soru: Bunu kullanırsam neden URL'mdeki soru işareti gösterilmiyor:
$ uri? $ Args

Veya $ uri $ is_args $ args kodlanmamış URL'yi çevirir ve soru işareti% 3f olarak gösterilir.

Fikirler?

EDIT: Bu davranış proxy_pass ile birlikte kullanırken var gibi görünüyor. Basit bir yeniden yazmada gerçekten iyi çalışır.

Yanıtlar:


15
  1. In rewritesize URL karşı maç yolu sadece kısmen. Bu $1, sorgu dizesini içermeyeceği anlamına gelir .
  2. Varsayılan olarak, Nginx yeniden yazma işleminin yerine orijinal sorgu dizesi ekler.

Yani, yazmak güvenli olmalı

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

Nginx'in orijinal sorgu dizesini eklemesini istemiyorsanız ?, yeni URL'nin sonunda belirtmeniz yeterlidir :

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

Teşekkür ederim! Yanlış şekilde yapmaya çalıştığımı görmedim.
Sascha

A + bu en iyi cevap
Teşekkür ederim

3

İçin eşleşme rewritesorgu parametrelerini içermez, bu yüzden başka bir yerde test etmeniz gerekir.

Deneyin:

if ($args !~* locale=de\-de){
    rewrite ^(.*)$ $1&locale=de-de last;
}


@Alexander İyi bir nokta; Bu rewriteihtiyaçları lastvarsa-güvenli olmak. Düzenlenen.
Shane Madden

3

rewriteİstek parametreleri, URI tek yol bölümünü değiştirmez. Deneyimlerime göre, yeniden yazma işlemleriyle uğraşmak garip döngülere yol açar, burada yeni parametrenin sonuna reklam sonsuz eklenir. Yeniden yazma, muhtemelen Nginx'te bunu yapmanın yolu değildir.

Bunun yerine, $argsdeğişkeni şu setyönergeyi kullanarak değiştirmelisiniz :

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

$argsMutasyona uğraması gerektiğine katılmıyorum . Bunun yerine, @ AlexanderAzarov'un çözümüne bakın.
Teşekkürler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.