--判断变量是否匹配正则表达式

~:判断时区分字符大小写

~*:判断时不区分字符大小写

!~:判断时区分字符大小写

!~*:判断时不区分字符大小写

if ($http_user_agent ~ MSIE) {
    rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
    set $id $1;
}

--文件及目录判断

“-f”, “!-f”:判断指定的路径是否为存在且为文件;

“-d”, “!-d”:判断指定的路径是否为存在且为目录;

“-e”, “!-e”:判断指定的路径是否存在,文件或目录均可;

“-x”, “!-x”:判断指定路径的文件是否存在且可执行;

示例1:判断index.html是否存在
location =/index.html {
	if (!-f "$document_root/index.html") {
	    rewrite ^(.*)$  /index2.html;
	}
}
示例2:判断URL中是否存在某个参数Parameter
if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { 
	...
}
示例3:判断URI中是否为某个特定路径
if ($request_uri ~* "^/app/stat/"){
    ...
}
示例4:开放白名单内的功能,其余功能禁止访问
# 白名单开关。false,打开;true,关闭。
set $isInWhiteList 'false';
# 白名单1:统计
if ($request_uri ~* "^/app/stat/"){
    set $isInWhiteList  'true';
}
# 白名单2:ajax接口
if ($request_uri ~* "^/app/ajax/"){
    set $isInWhiteList 'true';
}
# 采用白名单方式放行功能
location /app {
    if ($isInWhiteList != 'true') {
        rewrite ^/ /deny;
    }
    proxy_pass  http://127.0.0.1:8080;
}
# 禁止访问
location =/deny {
    deny all;  
}
示例5:if-else
# 条件:if
if ($request_uri ~* "abc"){
	set $flag '${flag}1';
}
# 条件:else
if ($request_uri !~* "abc"){
	set $flag '${flag}2';
}
示例6:多重if判断
server {
	...
	
	set $flag "";
	
	# 条件1:if
	if ($request_uri ~* "abc"){
		set $flag '${flag}1';
	}
	# 条件1:else
	if ($request_uri !~* "abc"){
		set $flag '${flag}2';
	}
	
	# 条件2:if
	if ($query_string ~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { 
		set $flag '${flag}1';
	}
	# 条件2:else
	if ($query_string !~* ".*(?:^|\?|&)method=autoGenerateIndex(?:(?:&.*)|$)") { 
		set $flag '${flag}2';
	}
	
	# 多重if完了,根据结果做相应处理
	if ($flag = '11') {
		...
	}
	if ($flag = '12') {
		...
	}
	if ($flag = '21') {
		...
	}
	if ($flag = '22') {
		...
	}
	
	location / {
		...
	}
}



签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回