当前位置: 首页 > news >正文

Nginx:rewrite指令之flag标志

Nginx 的 rewrite 指令用于根据正则表达式来匹配请求的 URI,并将其重写为新的 URI。rewrite 指令可以包含一个可选的 flag(标志),该标志用于控制重写操作后的行为。

rewrite regex replacement [flag]

一. 常用四种 flag

  1. redirect(302 临时重定向)
  • 当重写完成后,以临时重定向的方式返回重写后生成的新 URL给客户端,状态码为 302。
  • 浏览器地址栏会显示跳转后的 URL 地址。
  1. permanent(301 永久重定向)
  • 当重写完成后,以永久重定向的方式返回重写后生成的新 URL 给客户端,状态码为 301。
  • 浏览器地址栏会显示跳转后的 URL 地址。
  1. break
  • 重写完成后,停止对当前 URL 在当前 location 以及其他 location 中(当前 serve)后续的其它重写操作。
  • 不会跳出 location 作用域,也不会重新搜索与更改后的 URI 相匹配的 location。
  • 适用于一个 URL 一次重写的场景。
  1. last
  • 重写完成后,停止对当前 URI 在当前 location 中后续的其它重写操作。
  • 但会对新的 URL 启动新一轮重写检查,并可能跳出当前 location 作用域,搜索与更改后的 URI 相匹配的 location。
  • 适用于一个 URL 可能需要多次重写的场景。

二. last 和 break 区别

server {listen 80;server_name  pic.path-analytics.com;root /tmp/html/;location / {rewrite /1.html /2.html;rewrite /2.html /3.html;}location /2.html {rewrite /2.html /a.html;}location /3.html {rewrite /3.html /b.html;}
}
情况一:无 flag

访问 http://pic.path-analytics.com/1.html,结果为:

在这里插入图片描述
执行顺序如下:

  1. 首先匹配 location

    在这里插入图片描述

  2. 然后根据第一个 rewrite 将 URL 由 /1.html 改写为了 /2.html

  3. 此时并未重新发起请求,而是在当前 location 中查找是否有关于 /2.html 的 重写规则

  4. 查找到第二个 rewrite 将 URL 由 /2.html 改写成 /3.html,再去查找当前 locaiton 中是否还有 /3.html 的重写规则

  5. 没有找到,此时 URL 为 http://pic.path-analytics.com/3.html

  6. 再次去请求,匹配 location
    在这里插入图片描述

  7. 进入该 location,将 URL 由 /3.html 改写为 /b.html。这个 location 中没有 /b.html 的改写规则,此时 URL 为 http://pic.path-analytics.com/b.html

  8. 再次去请求,匹配 location
    在这里插入图片描述

  9. 但是该 location 中没有 /b.html 的匹配规则,所以直接响应 b.html

情况二:break
location / {rewrite /1.html /2.html  break;rewrite /2.html /3.html;
}

访问 http://pic.path-analytics.com/1.html,结果为:

在这里插入图片描述

执行顺序如下:

  1. 首先匹配 location
    在这里插入图片描述
  2. 执行第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
  3. break 直接终止了当前 location 和其他 location 的匹配,返回 2.html
情况三:last
location / {rewrite /1.html /2.html  last;rewrite /2.html /3.html;
}

访问 http://pic.path-analytics.com/1.html,结果为:
在这里插入图片描述
执行顺序如下:

  1. 首先匹配 location
    在这里插入图片描述
  2. 执行第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
  3. last 终止了当前 location 中的匹配,此时 URL 为 http://pic.path-analytics.com/2.html
  4. 再次去请求,匹配 location
    在这里插入图片描述
  5. 根据 rewrite 将 URL 由 /2.html 改写为 /a.html,此时 URL 为 http://pic.path-analytics.com/a.html
  6. 再次去请求,匹配 location
    在这里插入图片描述
  7. 该 location 中没有 /a.html 的匹配规则,所以直接响应 a.html
情况四:修改 location 优先级

在 location 中使用正则匹配

location ~ / {rewrite /1.html /2.html  last;rewrite /2.html /3.html;
}

访问 http://pic.path-analytics.com/1.html,结果为:

在这里插入图片描述
执行顺序如下:

  1. 首先去匹配 location
    在这里插入图片描述
  2. 根据第一个 rewrite 将 URL 由 /1.html 改写为 /2.html
  3. last 终止了当前 location 中的匹配,此时 URL 为 http://pic.path-analytics.com/2.html
  4. 再次去请求,由于 location 中正则匹配的优先级高于普通匹配,匹配 location
    在这里插入图片描述
  5. 在该 location 中,根据 rewrite 将 URL 由 /2.html 改写为 /3.html,此时 URL 为 http://pic.path-analytics.com/3.html
  6. 再次去请求,由于 location 中正则匹配的优先级高于普通匹配,匹配 location
    在这里插入图片描述
  7. 在该 location 中没有找到 /3.html 的重写规则,所以直接响应 3.html

三. 不同 flag 下浏览器与网络请求的不同表现

location / {rewrite /1.html /2.html [flag];rewrite /2.html /3.html;
}location /2.html {rewrite /2.html /a.html;
}
情况一:没有 flag

在这里插入图片描述

情况二:break

在这里插入图片描述

情况三:last

在这里插入图片描述

情况四:redirect

在这里插入图片描述

情况五:permanent

在这里插入图片描述

http://www.lryc.cn/news/462314.html

相关文章:

  • C#从零开始学习(如何构建应用)
  • FCoE简介
  • 论文笔记:Template-Based Named Entity Recognition Using BART
  • 【Nestjs】从入门到精通(依赖注入)
  • C语言函数
  • FLINK SQLTable API 的基本概念及常用API
  • Docker daemon.json配置参数及格式帮助信息
  • 十月编程语言排行榜~
  • 十三、行为型(策略模式)
  • Vue环境安装以及配置
  • Redis 数据类型hash(哈希)
  • 单一执行和循环执行的例行性工作
  • 单细胞分析 | Cicero+Signac 寻找顺式共可及网络
  • 人工智能创造出大量新型蛋白质
  • Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
  • c 语言 sprintf
  • stm32单片机个人学习笔记10(TIM编码器接口)
  • 如何在Android中存储数据?
  • 13.3寸工业三防平板数字化工厂产线数采手持终端
  • ssh连接慢的问题或zookeeper远程连接服务超时
  • perf工具使用指导
  • WordPress 禁用上传媒体图片自动生成缩略图及多尺寸图片教程
  • 锥线性规划【分布鲁棒、两阶段鲁棒方向知识点】
  • linux环境下的程序设计与git操作
  • Matlab中HybridFcn参数的用法
  • Leetcode 3316. Find Maximum Removals From Source String
  • jeecg3版本的vue,离线启动
  • C++的内存管理
  • YZ系列工具之YZ09:VBA_Excel之读心术
  • 嵌入式系统---看门狗