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