Pasé algún tiempo tratando de encontrar la respuesta antes de escribir esta pregunta:
Tengo varios location
bloques en mi archivo de configuración de nginx que se ven así:
location ~ ^/(doc|img|bla|foo)/metadata/$ { ... }
location ~ ^/(doc|img|bla|foo)/deleted/$ { ... }
location ~ ^/(doc|img|bla|foo)/something/$ { ... }
Entonces pensé que sería una buena idea refactorizar la expresión regular repetida en una variable que configuré en la server
sección (también porque sé que tendré que agregarle más en el futuro), así:
server {
set $my_regex doc|img|blah|foo;
# I also tried this one:
set $my_regex "doc|img|blah|foo";
....
}
Que luego reutilizaría dentro de los bloques de ubicación:
# this doesn't have any effect
location ~ ^/($my_regex)/metadata/$ { ... }
# this one neither
location ~ ^/(\$my_regex)/deleted/$ { ... }
# and this one neither
location ~ ^/(${my_regex})/something/$ { ... }
¿Alguna idea? ¡Gracias!
Respuesta1
No hay forma de utilizar variables en location
la comparación.
Si lo deseas, probablemente estés haciendo algo mal. En este caso, podría probar con ubicaciones de anidación.
Respuesta2
Por favor revisa estoenlacecomo dijeron en NGINXdocumentación
The PCRE library supports named captures using the following syntax:
?<name> Perl 5.10 compatible syntax, supported since PCRE-7.0
?'name' Perl 5.10 compatible syntax, supported since PCRE-7.0
?P<name> Python compatible syntax, supported since PCRE-4.0
Las capturas con nombre son una característica de PCRE y tienen diferentes sintaxis disponibles en diferentes versiones. ¿Para la sintaxis que utilizas? debes tener PCRE 7.0 al menos.