nginx rewrite aggiunge un parametro alla fine di un url


13

Devo configurare il mio proxy inverso in modo che alla fine dell'URL venga aggiunto il seguente parametro: &locale=de-de

Questo funziona quasi:

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

Tuttavia, il problema è che devo aggiungere "& locale = de-de" solo se non è già presente e se è presente un "?" nell'URL ...

Posso ottenere aiuto nella formulazione della regex corretta per farlo?

Un'altra domanda: perché il punto interrogativo nel mio URL non viene visualizzato se uso questo:
$ uri? $ Args

Oppure $ uri $ is_args $ args traduce l'URL non codificato e il punto interrogativo viene mostrato come% 3f.

Idee?

EDIT: sembra che questo comportamento esista durante l'utilizzo in combinazione con proxy_pass. In una semplice riscrittura funziona davvero bene.

Risposte:


15
  1. Nella rewritetua corrispondenza solo con la parte del percorso dell'URL . Ciò significa $1che non conterrà la stringa di query.
  2. Per impostazione predefinita, Nginx aggiunge la stringa di query originale alla sostituzione di riscrittura.

Quindi, dovrebbe essere sicuro scrivere

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

Nel caso in cui non desideri che Nginx aggiunga la stringa di query originale, specifica semplicemente ?alla fine dell'URL di sostituzione:

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

Grazie! Non ho visto che ho provato a farlo nel modo sbagliato.
Sascha,

A + questa è la risposta migliore
Grazie,


3

Il rewritenon modifica i parametri di richiesta, solo la parte di percorso URI. Nella mia esperienza, pasticciare con le riscritture porta a strani cicli, in cui il nuovo parametro viene aggiunto all'infinito. Riscrivere probabilmente non è il modo di farlo in Nginx.

Invece, dovresti modificare la $argsvariabile usando la setdirettiva:

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

Non sono d'accordo sul fatto che $argsdovrebbe essere mutato. Invece, vedi la soluzione di @ AlexanderAzarov.
Grazie,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.