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

rewrite中的if、break、last

目录

rewrite 作用:

依赖:

打开重定向日志:

if 判断:

location {} 本身有反复匹配执行特征

在 location  中加入 break 和 last (不一样)

加了break后,立刻停止向下 且 跳出。

加了last,会停止当前向下后,会重头再来一遍。

在 server 中加入 break 和 last (一样)


rewrite 作用:

域名跳转(重定向)
URL重写(伪静态)(一长串参数很复杂的链接 跳转 到简介的链接上)
动静分离(跳转域名然后接入CDN实现加速,这种情况较多,对于大流量的网站相对鸡肋,但对于小网站很实用)

依赖:

PCRE库 ,因为要用到正则表达式
ngx_http_rewrite_module  需要编译入的模块

配置 rewrite重定向日志:

1) rewrite_log on;
2)错误日志中 必须开启 notice 记录等级,然后rewrite会被写入到error.log中 

if 判断

依靠nginx内置非自定义变量, 如 $request_method、 request_uri
逻辑判断符号   
~ 匹配(正则表达式)    ~*  不区分大小写匹配(正则表达式)
匹配的字符串可以是正则表达式,通常不用加引号,仅在表达式中有特殊符号( 空格、花括号、分号等时)用单引号括起来。
  • 限制 请求方式 为post
  • 限制 请求的浏览器 为 MSIE或firefox或spider  
当不确定浏览器名时候可以用 ~* 来忽略大小写。
  • 限制 当请求的文件 不存在时候
  • 限制 URL中gid包含9-12个数字
\d 代表数字  {9,12} 代表范围 ,即当 gid 等于 9至12个数字开头,/ 结尾,的时候就是符合的。

location {} 本身有反复匹配执行特征

如下,当是www.lwjweb.com/1.html 时候,会先匹配 location / 里的变为 www.lwjweb.com/3.html   ——  出来匹配到 /3.html 变为 www.lwjweb.com/a.html  。 这时候又会从头匹配到 location / ,只是进去以后没有对应的rewrite ,这时匹配才结束。
server {
    location / {
        rewrite /1.html /2.html ;
        rewrite /2.html /3.html ;
    }
    location /3.html {
        rewrite a.html
    }
}
例:
rewrite 一个1.html转2.html ,2.html转3.html的例子
多个rewrite会根据上一步结果依次执行
错误日志中可见,1.html 匹配到了/1.html 转换为了2.html,2.html 匹配到了/2.html 转换为了3.html,3.html 最后还再次匹配进了 /  ,进行了 /1.html 和 /2.html 的对比,但是没有匹配成功。
break、last  可用来防止反复rewrite

在 location  中加入 break 和 last (不一样)

  • 加了break后,立刻停止向下 且 跳出。

不但这个location不会执行,外面的其他location也不会执行,就此停止。
  • 加了last,会停止当前向下后,会头再来一遍。

server {
    location / {
        rewrite /1.html /2.html  last;
        rewrite /2.html /3.html ;
    }
    location /2.html {
        rewrite a.html
    }
}
#结果是/a.html
当是www.lwjweb.com/1.html 时候,会先匹配 location /  里的 /1.html 的变为 www.lwjweb.com/2.html   ,被 last 打断,重头再来,再同时匹配到 / 和 /2.html ,但因为/2.html  更为准确因此会走 /2.html ,变为 www.lwjweb.com/a.html  。 这时候又会从头匹配到 location / ,只是进去以后没有对应的rewrite ,这时匹配才结束。
在 server 中加入 break 和 last (一样)
不在location中的话,2个都不会重复运行。
   
http://www.lryc.cn/news/12899.html

相关文章:

  • JavaSE-线程池(5)- 建议使用的方式
  • 城市轨道交通供电系统研究(Matlab代码实现)
  • 什么是 RESTful 风格?
  • 从业6年,对敏捷和自动化测试的一点心得
  • ThreeJS 之界面控制
  • 【查找算法】解析学习四大常用的计算机查找算法 | C++
  • Android实例仿真之一
  • 软考高级-信息系统管理师之重要工具和技术的口语化表示(最新版)
  • 基于springboot+vue的个人健康信息服务平台
  • SpringBoot2.x实战专题——SpringBoot2 多配置文件【开发环境、测试环境、生产环境】
  • 测试2:编写测试用例的方法
  • docker安装配置镜像加速器-拉取创建Mysql容器示例
  • WSL1和WSL2相互转换以及安装路径迁移相关问题
  • 系统分析*
  • 【redis】持久化:RDB和AOF
  • 2023Python接口自动化测试实战教程,附视频实战讲解
  • 【原创】java+swing+sqlserver药品管理系统设计与实现
  • 软考高级信息系统项目管理师系列之二十七:信息文档管理与配置管理
  • 软考高级-信息系统管理师之项目管理基础(最新版)
  • leetcode240+Search a 2D Matrix II+从右上角开始
  • 0xL4ugh 2023
  • Mybatis(4)之跟着老杜做一个简单的银行转账会话
  • VBA提高篇_ 22 事件处理
  • 【蓝桥杯集训·周赛】AcWing 第91场周赛
  • 【人工智能AI】三、NoSQL 实战《NoSQL 企业级基础入门与进阶实战》
  • platform 总线
  • 2023第10届生物发酵展3月30-4月1号山东济南开展,参观路线来了
  • RK356x U-Boot研究所(命令篇)3.6 fdt命令的用法
  • 2023年社工工资多少钱一月 能领多少补贴
  • 面试攻略,Java 基础面试 100 问(十一)