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; }