抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

nginx里无法直接使用 if else这样的用法,需要根据临时变量来判断,原理就是在判断

背景

有三个匹配规则如下:

1
2
3
4
A:$uri !~ ^.*/yoga-system/(login|send-authc-captcha|api|debug|product).*$

B:$uri ~ ^.*/yoga-system/center/(d+)/index/vision$
C:$query_string ~ route=

三个规则对应d,f两个处理方式。

要求,当满足条件A或者条件C就走d处理方式, 满足条件B就走f处理方式。通常代码想到的肯定使用||了,不过nginx里不支持,也没有if else,这里就要多写一步,立一个flag

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set $flag "0";
if ($uri !~ ^.*/yoga-system/(login|send-authc-captcha|api|debug|product).*$){
set $flag "1";
}

if ($uri ~ ^.*/yoga-system/center/(d+)/index/vision$){
set $flag "2";
}
if ($query_string ~ route=) {
set $flag "3";
}
echo $flag; //可以看看条件有没有匹配错,跟踪下日志的输出
if ($flag ~* "2"){
处理方式d,具体的自己写
}
if ($flag ~* "1|3"){
处理方式f,具体的自己写
}

set $flag "1";里的值可以自己定义,上面先立flag,下面去匹配flag,包含关键字,执行对应的步骤。

评论