Nginx的rewrite之if指令(nginx location if条件)
if指令
该指令用来支持条件判断,并根据条件判断结果选择不同的Nginx配置。
语法 if (condition){...},嵌入位置是在 server、location
if后面,必须要有一个空格
condition为判定条件,可以支持以下写法:
- 变量名。如果变量名对应的值为空或者是0,if都判断为false,其他条 件为true。
具体配置实例:
vim nginx.conf //打开配置
$username如果为为空,就会输出0,如果变量名对应的值为空或者是0,if都判断为false,其他条件为true,此刻下面的return 输出的是empty
检验语法,重新加载
访问IP之后,输出了param is empty了
现在将$username设置成"ROSE"如果不是空字符串了
检验语法,重载配置
现在输出了ROSE了
还可以将if后面添加$args参数,
因为?没有,当前获取的值夜没有,最后返回了一个error
如果还有值,最终就返回了success
- 变量名。如果变量名对应的值为空或者是0,if都判断为false,其他条 件为true。
if ($param){
}
2. 使用"="和"!="比较变量和字符串是否相等,满足条件为true,不满 足为false
这里可以设置,如果是POST请求,就可以直接返回一个错误码
if ($request_method = POST){
return 405;
}
具体写法
第一次请求发送是GET请求
cmd简单访问请求的写法
curl -X POST http://xxx.xxx.xxx.xx:8081/testif
3. 使用正则表达式对变量进行匹配,匹配成功返回true,否则返回 false。变量与正则表达式之间
使用"~","~*","!~","!~*"来连接。
"~"代表匹配正则表达式过程中区分大小写,
"~*"代表匹配正则表达式过程中不区分大小写
"!~"和"!~*"刚好和上面取相反值,如果匹配上返回false,匹配不上返 回true
$http_user_agent存储的是客户端具体的版本信息,它所存储的是user_agent所需的值,在user_agent中所存储的是Safari的意思
具体检验写法:~ Safari
因为最后包含Safari的值,最终显示了Chrome
做一个检验大小写的配置 ~safari的写法
因为~区分了大小写,走了return系列
如果写了~*就能够匹配了
现在就看到了,已经满足了Chrome的配置条件了
4. 判断请求的文件是否存在使用"-f"和"!-f",
当使用"-f"时,如果请求的文件存在返回true,不存在返回false。
当使用"!f"时,如果请求文件不存在,但该文件所在目录存在返回
true,文件和目录都不存在返回false,如果文件存在返回false
5、用户请求在访问一个根本不存在的路径的时候,出现了404的问题,这种写法不太好看,如果想要编写一些提示信息使用"-f"和"!-f"进行判断
资源不存在的提示信息
访问了没有资源的页面显示的设置
5、判断请求的目录是否存在使用"-d"和"!-d",
当使用"-d"时,如果请求的目录存在,if返回true,如果目录不存在 则返回false
当使用"!-d"时,如果请求的目录不存在但该目录的上级目录存在则返 回true,
该目录和它上级目录都不存在则返回false,如果请求目录存 在也返回false. 6. 判断请求的目录或者文件是否存在使用"-e"和"!-e"
当使用"-e",如果请求的目录或者文件存在时,if返回true,否则返回 false. 当使用"!-e",如果请求的文件和文件所在路径上的目录都不存在返回 true,否则返回false
7. 判断请求的文件是否可执行使用"-x"和"!-x" 当使用"-x",如果请求的文件可执行,if返回true,否则返回false
当使用"!-x",如果请求文件不可执行,返回true,否则返回false