Nginx 配置中,不支持 if 语句的嵌套,也不支持逻辑与、或运算。比如我们有一个需求,需要配置重定向,访问网站任何页面都跳转到指定页面。
以下两种常规写法都会报错:
if ($uri != "/archives/1665" && !-f $request_filename){
rewrite ^/(.*)$ https://www.02405.com/archives/1665 redirect;
}
if ($uri != "/archives/1665"){
if(!-f $request_filename){
rewrite ^/(.*)$ https://www.02405.com/archives/1665 redirect;
}
}
那么要怎么解决这个问题呢?其实我们可以使用变量的方式来变通/间接解决:
set $flag "";
if ($uri != "/archives/1665"){
set $flag "${flag}1";
}
if (!-f $request_filename) {
set $flag "${flag}1";
}
if ($flag = "11") {
rewrite ^/(.*)$ https://www.02405.com/archives/1665 redirect;
}
怎么样,是不是换个思路也很简单。