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.
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:En este caso, el símbolo
$
antes demy_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.