63

如何location在 Nginx 中设置一个条件来响应不等于列出的位置的任何内容?

我试过了:

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

但它不会触发重定向。它只是使用服务器配置其余部分中的规则处理请求的 URI。

4

2 回答 2

88

根据nginx文档

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

所以你可以定义像

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

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
于 2013-04-30T15:54:52.233 回答
76

我也在寻找同样的东西。并找到了这个解决方案。

使用否定正则表达式断言:

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

中的否定正则表达式

正则表达式的解释:

如果 URL 不匹配以下任何路径

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

然后它将进入该位置块并对其进行处理。

于 2016-09-17T17:08:28.690 回答