Nginx----rewrite模块

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。

原文地址:https://www.cnblogs.com/QicongLiang/p/10394424.html