[英]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
然后它将进入该位置块并将处理它。
假设您有两个位置,例如location1
和location2
,您可以尝试按照位置块配置来解决您的问题。
location ~ ^/(location1|location2) {
rewrite (.*) http://example.com/$1 permanent;
}
您遇到的问题也可能是由于配置中存在多个位置块的序列。 请检查,如果在此之前的任何位置块,请提供请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.