2014-10-20 128 views
0

找到一個更清潔nginx的位置,我想建立一個滿足所有,但使用正則表達式

http://uri/proxy-wmts 

例如位置:

http://uri/proxy/toto 
http://uri/proxy?param=value 

我出來與:

location ~ ([^/]*)/proxy(\-[^w][^m][^t][^s])* 

但我認爲這有點醜,我正在尋找更清潔的解決方案。

+1

爲什麼不改變順序你的位置?如果'location =/proxy-wmts'首先出現,它將不會被任何其他表達式匹配。 ['location' documentation](http://nginx.org/en/docs/http/ngx_http_core_module.html#location)詳細說明了位置匹配順序。如果不清楚,請在此粘貼您的配置,以便我們爲您提供幫助。我也相信這個問題更適合於[sf]。 – Lukas 2014-10-20 16:49:25

+0

謝謝,這就是我昨天結束的,爲了好奇的緣故,我很樂意看到這個問題的答案。 – 2014-10-21 05:38:17

+0

並感謝指向我服務器故障盧卡斯,不知道那一個! – 2014-10-21 05:39:01

回答

1

正如我在我的評論中已經指出的那樣,使用正確的location順序會更容易和更高效(匹配常量字符串比正則表達式更快)。

location = /proxy-wmts {} # matches *exactly* /proxy-wmts 
location /proxy {} 

location /proxy-wmts {} # also matches /proxy-wmts.... 
location /proxy {} 

將幾乎你想要做什麼。你可以在這裏申請


一個正則表達式是一個 zero-length negative lookahead assertion (?!...)

location ~ ([^/]*)/proxy(?!-wmts) 

這將匹配

/uri/proxy 
/uri/proxy-abc 
/uri/proxy/abc 
... 

而不是

/uri/proxy-wmts 
/uri/proxy-wmts-abc 
/uri/proxy-wmts/abc