réécriture nginx ajouter un paramètre à la fin d'une URL


13

J'ai besoin de configurer mon proxy inverse pour que le paramètre suivant soit ajouté à la fin de l'URL: &locale=de-de

Cela fonctionne presque:

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

Cependant, le problème est que je n'ai besoin d'ajouter '& locale = de-de' que s'il n'est pas déjà là et s'il y a un '?' dans l'url ...

Puis-je obtenir de l'aide sur la formulation de l'expression rationnelle correcte pour ce faire?

Une autre question: pourquoi le point d'interrogation dans mon URL ne s'affiche-t-il pas si j'utilise ceci:
$ uri? $ Args

Ou $ uri $ is_args $ args traduit l'url non encodée et le point d'interrogation est affiché comme% 3f.

Des idées?

EDIT: Il semble que ce comportement existe lors de l'utilisation en combinaison avec proxy_pass. Dans une simple réécriture, cela fonctionne très bien.

Réponses:


15
  1. Dans rewritevous ne correspondez qu'à la partie du chemin de l'URL . Ce qui signifie, $1ne contiendra pas la chaîne de requête.
  2. Par défaut, Nginx ajoute la chaîne de requête d'origine au remplacement de réécriture.

Donc, il devrait être sûr d'écrire

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

Dans le cas où vous ne souhaitez pas que Nginx ajoute la chaîne de requête d'origine, spécifiez simplement ?à la fin de l'URL de remplacement:

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

Je vous remercie! Je n'ai pas vu que j'essayais de le faire de la mauvaise façon.
Sascha

A + c'est la meilleure réponse
Merci


3

Le rewritene modifie pas les paramètres de la demande, uniquement la partie chemin de l'URI. D'après mon expérience, jouer avec les réécritures conduit à des cycles étranges, où le nouveau paramètre est ajouté à l'infini. La réécriture n'est probablement pas la façon de procéder dans Nginx.

Au lieu de cela, vous devez modifier la $argsvariable à l'aide de la setdirective:

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

Je suis en désaccord que cela $argsdevrait être muté. Voir plutôt la solution de @ AlexanderAzarov.
Merci
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.