Nginx的位置“不等于”正则表达式(Nginx location “not equal to” r

2019-09-01 12:23发布

How do I set a location condition in Nginx that responds to anything that isn't equal to the listed locations?

I tried:

location !~/(dir1|file2\.php) {
   rewrite ^/(.*) http://example.com/$1 permanent;
}

But it doesn't trigger the redirect. It simply handles the requested URI using the rules in the rest of the server configuration.

Answer 1:

nginx的文档

有没有语法不匹配正则表达式。 相反,与目标匹配的正则表达式,并分配一个空块,然后使用位置/匹配其他任何

所以,你可以定义类似

location ~ (dir1|file2\.php) { 
    # empty
}

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}


Answer 2:

我一直在寻找相同。 发现此解决方案。

使用正则表达式负断言:

location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) { 
.... # your stuff 
} 

来源抵消了位置的正则表达式

正则表达式的说明:

如果网址不符合以下任何路径

example.com/favicon.ico
example.com/resources
example.com/robots.txt

然后,它会去那个位置区块内,将对其进行处理。



Answer 3:

假设你有两个位置说, location1location2 ,你可以尝试以下位置块配置为您解决问题。

 location ~ ^/(location1|location2) {
      rewrite (.*) http://example.com/$1 permanent; 
 }

另外你所面临的问题可能是因为多个位置块的配置序列。 请检查,在任何情况下,本之前出现,成为该请求的位置块。



文章来源: Nginx location “not equal to” regex