2013-03-30 23 views
15

我想匹配問號「?」作爲nginx.conf位置上的正則表達式。如何匹配問號「?」作爲nginx.conf位置上的正則表達式

例如,我想匹配的URL模式是/ something?foo = 5或/ something?bar = 8(參數僅可更改)。

由於nginx的採用RCPE,我可以如下寫出上nginx.conf位置:

location ~ ^/something\?.* { 
} 

上述辦法並不URL模式匹配。我怎樣才能做到這一點?

此外,以下不是我的期望。

location ~ ^/something?.* { 
} 

它會匹配/ something_foo_bar_buzz,我不指望。

回答

30

nginx位置塊根本不匹配查詢字符串。所以這是不可能的。

位置

該指令允許取決於URI不同的配置。

在nginx中,有一個內置變量$ uri,該位置塊與之匹配。例如,給請求

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

的$ URI值是這樣的字符串:

/app/login.php 

和QUERY_STRING存儲在nginx的變量的$ args:

username=xyz&password=secret 

要做些什麼WRT 。查詢字符串,你可以這樣做

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

但要小心,IF is Evil