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
,包含关键字,执行对应的步骤。