es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Expresión regular más variable en Nginx `proxy_redirect`

Nginx proxy_redirect permite el uso de variables como $my_var y expresiones regulares, prefijadas con ~.

Pero parece imposible usar ambas en combinación. ¿Es posible y cuál es la sintaxis correcta para escapar los metacaracteres?

Por ejemplo, he intentado:


proxy_redirect ~https?://\$proxy_host/(.)$ /app1/$1
proxy_redirect ~https?://\$proxy_host/(.)$ /app1/$1
proxy_redirect ~https?://$proxy_host/(.)$ /app1/$1

Obviamente, el último ejemplo es incorrecto, ya que el $ antes de proxy_host se interpreta como un metacaracter de expresión regular. Pero los otros dos ejemplos tampoco funcionan. (No se reconocen y, por lo tanto, no reescriben el encabezado Location.

Cuando lo reemplazo solo con


proxy_redirect ~https?://[^/]+/(.)$ /app1/$1

la redirección funciona perfectamente.

El problema es que esto redirigirá incluso para redirecciones externas, por lo que es demasiado inclusivo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la documentación oficial de nginx, es posible usar variables y expresiones regulares en combinación en la directiva proxy_redirect. La sintaxis correcta para escapar meta-caracteres es usar la barra invertida \ antes del caracter.

    Por ejemplo, la sintaxis correcta para usar una variable y una expresión regular en proxy_redirect sería:

    proxy_redirect ~*https?://\$my_var/(.*)$ /app1/$1;
    

    En este caso, el símbolo $ antes de my_var está escapado con \ para evitar que se interprete como un meta-carácter.

    Sin embargo, si la sintaxis anterior no funciona, podría ser debido a otros problemas de configuración o conflictos en el archivo de configuración de nginx. En este caso, sería mejor solucionar el problema o considerar soluciones alternativas como la sugerida en el ejemplo.

Comments are closed.