Nginx位置"不等于"正则表达式

Chr*_*aan 45 regex webserver nginx

如何location在Nginx中设置一个响应任何不符合列出位置的条件?

我试过了:

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

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

Rin*_*g Ø 71

根据nginx文档

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

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

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

location / {
    rewrite ^/(.*) http://example.com/$1 permanent; 
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道文档说“没有不匹配的语法”,但是 ~ ^/(?!(不匹配的文本或模式)) 是有效的正则表达式,更重要的是有效。 (4认同)
  • 值得注意的是:我需要它来有条件地重定向主机名,并且在重定向主机名旁边有更多的“位置”。重定向不起作用。结果我不得不按照 /sf/answers/983491911/ 添加一个 `break;` 指令 (2认同)

AMB*_*AMB 48

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

使用负正则表达式断言:

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

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