|
nginx通过ngx_http_rewrite_module模块支持url重写、支持if条件判断,但不支持else。 该模块需要PCRE支持,应在编译nginx时指定PCRE源码目录, nginx安装方法。 nginx rewrite指令执行顺序:
1.执行server块的rewrite指令(这里的块指的是server关键字后{}包围的区域,其它xx块类似) 如果循环超过10次,则返回500 Internal Server Error错误
break指令
语法:break;
停止执行当前虚拟主机的后续rewrite指令集
if ($slow) {
limit_rate 10k;
break;
}
if指令
语法:if(condition){...}
if指令实例
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;
}
return指令语法:return code; return code URL;
return URL;
停止处理并返回指定状态码(code)给客户端。 rewrite指令
语法:rewrite regex replacement [flag]; rewrite实例
server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}
如果这些rewrite放到 “
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
对于重写后的URL(replacement)包含原请求的请求参数,原URL的?后的内容。如果不想带原请求的参数 ,可以在replacement后加一个问号。如下,我们加了一个自定义的参数user=$1,然后在结尾处放了一个问号?,把原请的参数去掉。 rewrite ^/users/(.*)$ /show?user=$1? last;
如果正则表达regex式中包含 “ rewrite_log指令
nginx打开rewrite log例子
rewrite_log on;
1.打开rewrite on set指令
uninitialized_variable_warn指令
控制是否输出为初始化的变量到日志 (责任编辑:IT) |
