nginx rewrite
指令:
set:设置变量
if:用来判断一些在rewrite语句中无法直接匹配的条件,比如检测文件存在与否,http header,cookie等
用法: if(条件) {…}
- 当if表达式中的条件为true,则执行if块中的语句
- 当表达式只是一个变量时,如果值为空或者任何以0开头的字符串都会当作false
- 直接比较内容时,使用 = 和 !=
- 使用正则表达式匹配时,使用
~ 大小写敏感匹配
~* 大小写不敏感匹配
!~ 大小写敏感不匹配
!~* 大小写不敏感不匹配
- 使用-f,-d,-e,-x检测文件和目录
-f 检测文件存在
-d 检测目录存在
-e 检测文件,目录或者符号链接存在
-x 检测文件可执行
跟~类似,前置!则为"非"操作
return:用来直接设置HTTP返回状态,比如403,404等
break:立即停止rewrite检测
rewrite:
break – 停止rewrite检测,当含有break flag的rewrite语句被执行时,该语句就是rewrite的最终结果
last – 停止rewrite检测,但是跟break有本质的不同,last的语句不一定是最终结果.
redirect – 返回302临时重定向,一般用于重定向到完整的URL(包含http:部分)
permanent – 返回301永久重定向,一般用于重定向到完整的URL(包含http:部分)
########### 二级域名自动转到子目录下 #######################
set
$sub_domain
""
;
if
(
$http_host
~
"(.+).soul.com$"
) {
set
$sub_domain
$1
;
}
if
(
$http_host
=
"www.soul.com"
) {
set
$sub_domain
""
;
}
if
(
$sub_domain
!=
""
) {
rewrite /(.+) /
$sub_domain
/
$1
break
;
}