Nginx----rewrite模块(break、last详解)
break实例
我们先创建一台虚拟主机
server { server_name localhost; listen 8002; location /test/ { root /usr/local/nginx/html ; index index.html; rewrite (.*)/1.html $1/2.html; rewrite (.*)/2.html $1/3.html; }
可以看到这个虚拟主机是访问test目录下面的html文件的。
这里访问1.html文件会把请求转发到2.html文件那里。
然后请求到2.html那里又会转发到3.html那里。
server { server_name localhost; listen 8002; location /test/ { root /usr/local/nginx/html ; index index.html; rewrite (.*)/1.html $1/2.html break; rewrite (.*)/2.html $1/3.html; }
然后我们在第一条rewrite那里加上一个break
这样请求就会停在2.html那里了,直接就访问2.html了。
但是如果这里加的是last呢?
server { server_name localhost; listen 8002; location /test/ { root /usr/local/nginx/html ; index index.html; rewrite (.*)/1.html $1/2.html last; rewrite (.*)/2.html $1/3.html; }
结果是会访问到3.html,这时候的访问逻辑如下。
首先访问/test/1.html,rewrite成/test/2.html,然后遇到last。
last会把rewrite后的结果重新发到nginx那里,也就是说,rewrite后的结果,会在配置文件里面从上到下重新匹配一次。
这时候我们的请求已经变成/test/2.html了,在nginx里面会匹配到/test/这个location,然后这个location里面会匹配到第二条rewrite规则。
会把/test/2.html改写成/test/3.html,因此最后访问的就是3.html。