Nginx倒腾笔记(四):rewrite使用介绍

简介

key value
语法: rewrite regex replacement [flag];
默认值:
上下文: server, location, if

flag

  • last # 停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;
  • break # 停止执行当前这一轮的ngx_http_rewrite_module指令集;
  • redirect # 在replacement字符串未以“http://”或“https://”开头时,使用返回状态码为302的临时重定向;
  • permanent # 返回状态码为301的永久重定向。

针对于lastbreak 举例

  1. 先测试last

    nginx配置

    1
    2
    3
    4
    5
    6
    7
    8
    location ~ /rewrite/last {
    rewrite .* /rewrite/break.html last;
    }

    location ~ /rewrite/break {
    retorn 200 'break';
    rewrite .* /last.html break;
    }

    GET http://test.tyloafer.cn/rewrite/last

    结果: break

    上面结果表明,当我们第一次请求匹配到 /rewrite/last 的时候,我们此时应该把uri 重写成了 http://test.tyloafer.cn/rewrite/break.html, 然后拿着这个uri后找 nginx解析,从而匹配到了 第二个location

    即, 当我们使用 last 的时候,nginx会拿着解析后的uri再次进行解析

  2. 再测试last

    nginx配置

    1
    2
    3
    4
    5
    6
    7
    8
    location ~ /rewrite/last {
    return 200 'last';
    rewrite .* /rewrite/break.html last;
    }

    location ~ /rewrite/break {
    rewrite .* /last.html break;
    }

    last.html

    1
    this is last.html

    GET http://test.tyloafer.cn/rewrite/break

    结果: this is last.html

    上面结果表明,当我们第一次请求匹配到 /rewrite/break的时候,我们此时应该把uri 重写成了http://test.tyloafer.cn/rewrite/blast.html`, 然后拿着这个uri后, 直接去找相应的文件了

    即, 当我们使用 break 的时候,nginx会拿着解析后的uri不在解析,就随他去吧