概要:
此模块可以使用正则表达式改变URI,且可以依据变量重定向和选择配置。
如果此模块的指令放置在server层,他们将在请求的location确定之前执行。如果在选择的location有进一步的重写指令,他们仍然会执行!如果URI更改为location里面执行的指令结果,那么,location又决定了新的URI。
这个循环可以重复10次,之后Nginx返回一个500错误。
指令:
break
Syntax: | break |
Default: | |
Context: | server |
Reference: |
完成当前规则。继续执行当前location内的指令,但是不执行其他重写指令。
实例:
if ($slow) {
limit_rate 10k;
}
If
Syntax: | if ( condition ) { ... } |
Default: | |
Context: | server |
Reference: |
注意:使用if之前请阅读一下 the if is evil page 并且考虑使用try_files替代.
判断一个条件是否为真。如果条件为真,大括号里面的戴默就会执行,结果按照随后的配置处理。位于if指令之中的配置是继承与先前的层。
条件可以如下:
变量名;false包括:空字符串("", 或者以"0"开始的字符串;
一组对比的变量使用 = 和 !=
正则表达式匹配模式:
o ~ 执行大小写敏感匹配
o ~* 执行大小写不敏感匹配 (firefox 匹配FireFox)
o !~ and !~* 意为相反的, "不匹配"
· 判断文件是否存在使用 -f or !-f ;
· 判断目录是否存在使用 -d or !-d;
· 判断文件,目录或者符号链接是否存在使用 -e or !-e;
· 判断一个文件是否可执行 -x or !-x.
部分正则表达式可以放在括号里,之后他们的值可以通过$1到 $9这几个变量访问。阅读Extracting matches.
使用示例:
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $1;
}
if ($request_method = POST ) {
return 405;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return 403;
}
if ($args ~ post=140){
rewrite ^ http://example.com/ permanent;
}
内置变量 $invalid_referer的值通过 valid_referers指令赋值.
return
Syntax: | return code [ text ] |
Default: | |
Context: | server |
Reference: |
这个指令结束规则的执行,向客户端返回指定的状态代码。可以使用任何一个 0-999之间的http 返回代码. 此外, 非标准代码 444关闭没有发送头部的连接.