nginx rewrite agrega un parámetro al final de una url


13

Necesito configurar mi proxy inverso para que se agregue el siguiente parámetro al final de la url: &locale=de-de

Esto casi funciona:

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

Sin embargo, el problema es que necesito agregar '& locale = de-de' solo si aún no está allí y si hay un '?' en la url ...

¿Puedo obtener ayuda para formular la expresión regular correcta para hacer esto?

Otra pregunta: ¿Por qué no se muestra el signo de interrogación en mi url si uso esto:
$ uri? $ Args

O $ uri $ is_args $ args traduce la url no codificada y el signo de interrogación se muestra como% 3f.

Ideas?

EDITAR: Parece que este comportamiento existe mientras se usa en combinación con proxy_pass. En una simple reescritura, funciona muy bien.

Respuestas:


15
  1. En rewriteusted coincide solo con la parte de la ruta de la URL . Lo que significa $1que no contendrá la cadena de consulta.
  2. De forma predeterminada, Nginx agrega la cadena de consulta original al reemplazo de reescritura.

Por lo tanto, debería ser seguro escribir

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

En el caso de que no desee que Nginx agregue la cadena de consulta original, simplemente especifique ?al final de la URL de reemplazo:

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

¡Gracias! No vi que intenté hacerlo de la manera incorrecta.
Sascha

A + esta es la mejor respuesta
Gracias


3

El rewriteno modifica los parámetros de solicitud, solo la porción de ruta del URI. En mi experiencia, jugar con las reescrituras conduce a ciclos extraños, donde el nuevo parámetro se agrega hasta el infinito. Reescribir probablemente no sea la forma de hacer esto en Nginx.

En su lugar, debe modificar la $argsvariable utilizando la setdirectiva:

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

No estoy de acuerdo con que $argsdeba mutarse. En cambio, vea la solución de @AlexanderAzarov.
Gracias
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.