Table of Contents

nginx 多重判断

在Nginx 配置文件里面有简单的条件控制,但并不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,这就需要换一种方法来做了。

场景需求:
手机端访问web端的时候,需要跳转至手机端。但是某些页面又不需要跳转。刚好是公司的业务需要吧,所以有了nginx的多重判断
具体代码如下:

location = /web/address {
    if ($http_user_agent ~* "((MIDP)|(WindowsWechat)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC\-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT)|(SonyEricsson)|(NEC)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC)|(SED)|(EMOL)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(Opera))"  ) {
        set $ismob 1;
    }

    if ( $ismob = 1 ) {
        rewrite ^/(.*)$  https://m.fenghong.tech/channel/64688 redirect;
    }
    if ( $ismob != 1 ) {
        rewrite ^/(.*)$  https://www.fenghong.tech/home/activity?un=wdxx redirect;
    }
}

附if语法:
语法:if(condition){………}
配置作用域:server,location

"="""!="" 变量等于不等于条件
"~" "~" 匹配到指定内容是否区分大小写
"!~""!~" 匹配到指定内容是否区分大小写
"-f""!-f" 检查一个文件是否存在
"-d" "!-d" 检查一个目录是否存在
"-e""!-e" 检查一个文件,目录,软连接是否存在
"-x""!-x" 检查一个是否有执行权限
匹配的内容可以是字符串也可以是一个正则表达式。
如果一个正则表达式包含"}"或者";"就必须包含在单引号或双引号里面。

参考:

Related: