Rewrite使用

image-20210220225036023

语法: rewrite regex replacement [flag]; flag=【break/last/redirect/permanent】

regex 是正则表达式

replacement 是替换值,新值

flag 是处理标志

例:

http://rewrite.enjoy.com/aa.html –命中 /aa.html ,path=aa.html

本来应该在html/static文件夹下查找aa.html

image-20210222072030124

正则 ^/ 表示:总是匹配。

若rewrite正则匹配命中,则修改为path = /a.html(若不命中则不执行)。

变成了在html/static文件夹下查找a.html

rewrite不命中,则rewrite更换path运作不会发生

image-20210222072131239

相对servlet里面,是什么命令。内部重定向。外部浏览器是不知道的

flag=【break/last/redirect/permanent/不写】含义:

/redirect/permanent,如果rewrite命中,发页面重定向

#http://rewrite.enjoy.com/b.html

image-20210222072223434

会发生页面重定向

301/302重定向,对浏览器的记忆有区别

页面重定向,像servlet页面重定向一样,response返回。return;

#break/last 内部重定向,换path值

break标记,停止执行后续命令。相当于for(){break}

last标记,会引发location重新匹配。相当于for(){continue;}

注意: 不要轻易使用last标签,不利于后期维护。

flag是否有值的区别:

当有flag值的时候,rewrite层面的命令会中断,last会引发location重匹配。

当没有flag值的时候,rewrite还会往下走,最后一个rewrite覆盖前面的,再引发location重匹配。