繁体   English   中英

Nginx位置“不等于”正则表达式

[英]Nginx location “not equal to” regex

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

我试过了:

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

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

根据nginx文档

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

所以你可以定义类似的东西

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

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

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

使用负正则表达式断言:

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

来源否定正则表达式的位置

正则表达式的解释:

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

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

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

假设您有两个位置,例如location1location2 ,您可以尝试按照位置块配置来解决您的问题。

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

您遇到的问题也可能是由于配置中存在多个位置块的序列。 请检查,如果在此之前的任何位置块,请提供请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM