将用户请求的URL基于’regex’正则表达式所描述的模式进行检查,而后完成替换;
rewrite:
Syntax: rewrite regex replacement [flag]; Default: — Context: server, location, if
将用户请求的URL基于’regex’正则表达式所描述的模式进行检查,匹配到的时将其替换为’replacement’指定的新的URL;
如果在同一级配置块中存在多个’rewrite’规则,则会自上而下逐个检查;
被某个条件规则替换完成后,会重新一轮的替换检查,隐含循环机制;
‘flag’标志位用于控制此循环机制;
replacement:如果以”http://”或”https://”开头,则替换结果会直接以重定向返回给客户端;
flag的4个标志位:
last:重写完成后停止对此URI在当前location中后续的其他重写操作,而是对新的RUI启动新一轮重写检查;提前重启新一轮循环;默认行为;
break:重写完成后停止对此RUI在当前location中后续的其他重写操作,而是直接跳转至重写规则配置块之后的其他配置;结束循环;
redirect:重写完成之后以临时重定向方式(302)直接返回重写后生成的新URI给客户端,由客户端重写发起新请求,不能以”http://”或”https://”开头;
permanent:重写完成之后以永久重定向方式(301)直接返回重写后生成的新RUI给客户端,由客户端重写发起请求;
break:
Syntax: break; Default: — Context: server, location, if
return:
Syntax: return code [text]; return code URL; return URL; Default: — Context: server, location, if
if:
Syntax: if (condition) { ... } Default: — Context: server, location
condition:
== 字符串等值比较;
!= 字符串不等值比较;
~ 模式匹配,区分字符大小写;
~* 模式匹配,不区分字符大小写;
!~ 模式不匹配,区分字符大小写;
!~* 模式不匹配,不区分字符大小写;
文件及目录存在性判断:
-e,!-e 存在性;
-f,!-f 文件;
-d,!-d 目录;
-x,!-x 可执行;
rewrite_log:
Syntax: rewrite_log on | off; Default: rewrite_log off; Context: http, server, location, if
是否开启重写日志;
Examples:
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; }