nginx / Web Service

16.1 nginx:URL重写模块(ngx_http_rewrite_module)

 

将用户请求的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;
}

 

Leave a Reply

Your email address will not be published. Required fields are marked *