2011-05-02 13 views
16

Tengo un sistema de almacenamiento en caché que necesito eludir si el nombre del usuario (en una cookie) se encuentra en $ request_uri. Intento hacer algo como esto, pero no puedo hacer que la variable se interpole en la expresión regular. Alguna sugerencia bonita, por favor?cómo usar una variable dentro de una expresión regular "si" de nginx

Puedo establecer la variable $ me desde la cookie; Simplemente no puedo hacer que se interpole en la expresión regular.

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ $me) { set $chk ""; } 
if ($chk == "need") { rewrite^/testing } 

Siempre he intentado cosas como esta:

if ($uri ~ "by-{$me}") { set $chk ""; } 

Gracias! -Kevin

Respuesta

9

No es exactamente lo que pregunté, pero creo que funcionará para mis propósitos. Todavía tengo curiosidad por cómo interpolar una variable dentro de una regex de ngex PCRE si alguien más sabe!

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; } 
if ($by = $me) {set $chk "";} 
+2

Usted tiene un error de sintaxis en la primera línea, creo. El operador del doble igual no debería estar allí. Pensé que ese era * mi * problema por un segundo, pero ponerlos en un archivo de configuración no pasará ningún control previo al lanzamiento. – pospi

0

Es posible incorporar una variable dentro de una expresión de expresiones regulares, con solo colocar $ delante de la variable ... no hay necesidad de hacer $ {}

así que supongo que en su caso

if ($uri ~ "by-$me") { set $chk ""; } 

la expresión regular será entonces igual a por Kevin-

que he tenido que funciona de esta manera para una regla de expresiones regulares más complejo

donde quería orgin para que coincida con una lista de posibles nombres de dominio

set $domainWhitelist "yahoo\.com|google\.com|foo\.com"; 
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") { 
... 
} 
Cuestiones relacionadas