2014-10-20 132 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