if指令
if指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置,其语法结构为:
其中:花括号代表一个作用域,形成一个if配置块,是条件为真时的Nginx配置;condition为判断条件(true/false)。
可以在server块或location块中配置该指令
condition
可以支持以下几种设置方法:
变量名
如果变量的值为空字符串或者以“0”开头的任意字符串,if指令认为条件为false;
其他情况认为条件为true。
比如:
相等判断
使用 “=”(等于)和“!=”(不等于)比较变量和字符串是否相等,相等时 if 指令认为条件为true,反之为false。
正则表达式
使用正则表达式对变量进行匹配,匹配成功时 if 指令认为条件为true,否则为false。
变量与正则表达式之间用 “~”、“~*”、“!~” 或 “!~*” 连接:
“~” 表示匹配过程中对大小写敏感,“~*” 表示匹配过程中对大小写不敏感;
使用 “!~” 和 “!~*”,匹配失败时 if 指令认为条件为true,否则为false。
在正则表达式中,可以使用小括号对变量值进行截取,在花括号中使用 $1 … $9 引用截取的值。比如:
注意:整个正则表达式字符串一般不需要加引号,但如果含有右花括号 “}” 或者分号 “;” 字符时,必须要给整个正则表达式添加引号。
文件是否存在
“-f” 和 “!-f”
判断请求的文件是否存在使用 “-f” 和 “!-f”。
当使用 “-f” 时,如果请求的文件存在,if指令认为条件为true;如果请求的文件不存在为false;
使用 “!-f” 时,
如果请求的文件存在,也为false;
如果请求的文件不存在但该文件所在的目录存在,if指令认为条件为true;
如果该文件和它所在的目录都不存在,则为false。
“-d” 和 “!-d”
判断请求的目录是否存在使用 “-d” 和 “!-d”。
当使用 “-d” 时,如果请求的目录存在,if指令认为条件为true;如果请求的目录不存在,则为false;
当使用 “!-d” 时,
如果请求的目录存在,为false
如果请求的目录不存在但该目录的上级目录存在,if指令认为条件为true
如果该目录和它的上级目录都不存在,则为false
“-e” 和 “!-e”
判断请求的目录或者文件是否存在使用 “-e” 和 “!-e”。
当使用 “-e” 时,如果请求的目录或者文件存在时,if指令认为条件为true,否则为false。
当使用 “!-e” 时,如果请求的文件和该文件所在路径上的目录都不存在,为true,否则为false。
“-x” 和 “!-x”
判断请求的文件是否可执行使用 “-x” 和 “!-x”。
当使用 “-x” 时,如果请求的文件可执行, if指令认为条件为true,否则为false;
当使用 “!-x” 时,如果请求的文件不可执行,为true,否则为false。
Last updated
Was this helpful?