rewrite regex replacement [flag]; flag=【break/last/redirect/permanent】
regex 是正则表达式
replacement 是替换值,新值
flag — 是处理标志
例:
server{
listen 80;
server_name rewrite.mxs223.com;
root html/static;
location /aa.html{
rewrite ^/ /a.html;
}
location /cc.html{
rewrite ^/aa /a.html break;
rewrite ^/ /b.html break;
}
location /bb/{
rewrite ^/bb/a/ a.html redirect;
rewrite ^/bb/b/ b.html permanent;
}
}
http://rewrite.mxs223.com:8080/aa.html —命中 /aa.html,path=aa.html
本来应该在html/static文件夹下查找aa.html
location /aa.html{
rewrite ^/ /a.html;
}
正则 ^/ 表示:总是匹配
若rewrite正则匹配命中,则修改为path = /a.html(若不命中呢,不执行)。
变成了在html/static文件夹下查找a.html
e、rewrite不命中,则rewrite更换path运作不会发生
#http://rewrite.mxs223.com:8080/cc.html
location /cc.html{
rewrite ^/aa /a.html break;
rewrite ^/ /b.html break;
}
flag=【break/last/redirect/permanent/不写】含义。可以没有的。
/redirect/permanent,如果rewrite命中,发页面重定向
#http://rewrite.mxs223.com:8080/bb/a/a.html
#http://rewrite.mxs223.com:8080/bb/b/a.html
location /bb/{
rewrite ^/bb/a/ a.html redirect;
rewrite ^/bb/b/ b.html permanent;
}
会发生页面重定向
301/302重定向,对浏览器的记忆有区别
页面重定向,像servlet页面重定向一样,response返回。return;
#break/last 内部重定向,换path值
break标记,停止执行后续命令。for(){break}
last标记,会引发location重新匹配。for(){continue;}
ps : 不要轻易使用last标签
当有flag值的时候,rewrite层面的命令会中断。last会引发location重匹配
当没有flag值的时候,rewrite还会往下走,最后一个rewrite覆盖前面的。再引发location重匹配