Nginx if 语句不支持嵌套以及逻辑运算(与、或操作)的解决方法

admin 阅读:83 2024-02-29

Nginx 配置中,不支持 if 语句的嵌套,也不支持逻辑与、或运算。比如我们有一个需求,需要配置重定向,访问网站任何页面都跳转到指定页面。

以下两种常规写法都会报错:

if ($uri != "/archives/1665" && !-f $request_filename){
    rewrite ^/(.*)$ https://www.codesou.cn/archives/1665 redirect;
}

if ($uri != "/archives/1665"){
    if(!-f $request_filename){
        rewrite ^/(.*)$ https://www.codesou.cn/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.codesou.cn/archives/1665 redirect;
}

怎么样,是不是换个思路也很简单。

声明

1、部分文章来源于网络,仅作为参考。
2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!