如何在Nginx中设置location
条件,以响应与列出的位置不相等的任何内容?
我试过了:
location !~/(dir1|file2\.php) {
rewrite ^/(.*) http://example.com/$1 permanent;
}
但它不会触发重定向。它只使用服务器配置的其余部分中的规则处理请求的URI。
答案 0 :(得分:66)
没有与正则表达式匹配的语法。相反,匹配目标正则表达式并分配一个空块,然后使用location /匹配其他任何内容
所以你可以定义像
这样的东西location ~ (dir1|file2\.php) {
# empty
}
location / {
rewrite ^/(.*) http://example.com/$1 permanent;
}
答案 1 :(得分:41)
使用否定正则表达式断言:
location ~ ^/(?!(favicon\.ico|resources|robots\.txt)) {
.... # your stuff
}
来源 Negated Regular Expressions in location
正则表达式的解释:
如果网址与以下任何路径不匹配
example.com/favicon.ico
example.com/resources
example.com/robots.txt
然后它将进入该位置块并将进行处理。
答案 2 :(得分:-1)
假设您有两个位置,location1
和location2
,您可以尝试按照位置块配置来解决问题。
location ~ ^/(location1|location2) {
rewrite (.*) http://example.com/$1 permanent;
}
您面临的问题可能是因为配置中存在多个位置阻止序列。请检查,如果之前的任何位置块,请提供请求。