2013-03-30 17 views
15

Mi piacerebbe abbinare il punto interrogativo "?" come regexp sul percorso nginx.conf.Come abbinare il punto interrogativo "?" come regexp nella posizione nginx.conf

Ad esempio, un pattern URL che vorrei corrispondere è/qualcosa? Foo = 5 o/qualcosa? Bar = 8 (solo parametro modificabile).

Perché nginx adotta RCPE, posso scrivere la posizione sulla nginx.conf come segue:

location ~ ^/something\?.* { 
} 

È possibile che questo non corrisponde al modello di URL. Come lo posso fare?

Inoltre, il seguente non è la mia aspettativa.

location ~ ^/something?.* { 
} 

Corrisponde a/something_foo_bar_buzz che non mi aspetto.

risposta

30

Il blocco di posizione nginx non corrisponde affatto alla stringa di query. Quindi è impossibile.

Località

Questa direttiva permette configurazioni diverse a seconda della URI.

In nginx, c'è una variabile integrata $ uri, a cui il blocco di posizione è confrontato. Ad esempio, dare una richiesta

http://www.example.com/app/login.php?username=xyz&password=secret 

il $ valore di uri è questa stringa:

/app/login.php 

e la query_string viene memorizzato in nginx variabile $ args:

username=xyz&password=secret 

Per fare qualcosa WRT . stringa di query, si può fare qualcosa di simile

if ($args ~ username=xyz) { 
    # do something for requests with this query string 
} 

Ma attenzione, IF is Evil

Problemi correlati