使用正则表达式找到更干净的nginx位置

时间:2014-10-20 16:06:00

标签: regex nginx

我想创建一个匹配除

之外的所有位置
http://uri/proxy-wmts

例如:

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

我出来了:

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

但我觉得它有点难看,我正在寻找一个更清洁的解决方案。

1 个答案:

答案 0 :(得分: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