内部重定向分为两类:
内部重定向命令:error_page rewrite index 等
子请求,如文件中的include filename




rewrite可以用的条件判断变量:

140556592.png

$server_port、$uri




rewrite的if判断符:

151015574.png

151015989.png

151015273.png





rewrite 的指令:

151113519.png

151113298.png

总结:last和break的区别
if (...) {
"容器"
}
相同点:如果该容器被匹配,容器中有两个rewrite时,如果第一个rewrite结尾使用了last或break,第二个rewrite(或其它命令如return 403;)都不会执行(除非nginx处理被rewrite后的URI时再匹配时会处理)
不同点:如果本容器中使用了last,则nginx会跳过本容器中其它的rewrite 语句,然后rewrite后的URI会重新被NGINX执行查找匹配的location进行处理(如果有匹配就会执行相应容器中的语句),但是如果本容器中使用的是break,nginx会跳过本容器中其它的语句,同时不会再把rewrite 后的URI作为新的URL进行location匹配。
测试例子
if ($uri ~ ^/(.)\.t$) {
rewrite ^/(.)\.t$ /1$1.t; #添加或去掉last
rewrite ^/(..)\.t$ /1$1.t; #添加或去掉break
}
if ($uri ~ ^/(...)\.t$) {
rewrite ^/(...)\.t$ /1$1.t;
}



151159312.png

151159872.png



注:

nginx允许10次内部重定向循环,超过这个限制则返回500。

if 是rewrite中的一部分,location中的if中不建议使用非rewrite指令,if在server级别下是安全的