2013-03-30 10 views
15

Chciałbym dopasować znak zapytania "?" jako regexp na lokalizacji nginx.conf.Jak dopasować znak zapytania "?" jako regexp w lokalizacji nginx.conf

Na przykład wzór adresu URL, który chciałbym dopasować, to/coś? Foo = 5 lub/coś? Bar = 8 (parametr można zmienić).

Ponieważ nginx przyjmuje RCPE, mogę napisać lokalizację na nginx.conf następująco:

location ~ ^/something\?.* { 
} 

Powyższe nie pasuje do wzorca URL. Jak mogę to zrobić?

Ponadto nie jest to moje oczekiwanie.

location ~ ^/something?.* { 
} 

To pasuje do/coś_foo_bar_buzz, którego się nie spodziewam.

Odpowiedz

30

Blok lokalizacji nginx nie pasuje w ogóle do ciągu zapytania. To niemożliwe.

Lokalizacja

Dyrektywa ta pozwala na różne konfiguracje w zależności od URI.

W nginxie istnieje wbudowana zmienna $ uri, z którą blok lokalizacyjny jest dopasowany. Na przykład, dać zażądania

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

dolarów wartość URI jest ten ciąg:

/app/login.php 

i query_string jest przechowywany w nginx zmienna $ args:

username=xyz&password=secret 

coś zrobić wrt . Ciąg znaków zapytania, można zrobić coś takiego

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

Ale uważaj, IF is Evil

Powiązane problemy