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

理解NGINX的重写break和last,以及location匹配规

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

理解NGINX的重写break和last,以及location匹配规则

2018年05月05日 23:37:41 Lan的CSDN 阅读数:197

        location / {
            index  index.html index.htm index.php l.php;
if (!-e $request_filename) {
rewrite /[ac]\d+\.html /index/index/home last;
rewrite ^/admin$ /admin/login/login last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;

}
           autoindex  off;

        }

1.break在重写语句后会停止后续的重写规则:rewrite ^(.*)$ /index.php?s=$1 break; 包括其他的location均不会再执行匹配

2.单独写:rewrite ^(.*)$ /index.php?s=$1 last;
break;

 

 

 

 

  只会停止本location的重写规则。会用重写后的url执行其他的location

3.last会用重写后的url重新匹配所有的重写规则。包括本location里面的,意思为整个server里面的重新匹配。

4.注意:非常需要注意的是,重写规则会先匹配location外层的 如location =/1.php{rewrite ^(.*)$ /2.php last; , location ~ \.php(.*)$ ,location /flag { rewrite ^(.*)$ /1.php last; 。三种规则。访问http://localhost/flag/1.php并不会访问到2.php

而是出现:No input file specified.  因为 已经匹配到了location ~ \.php(.*)$规则。由于没有/flag/1.php所以出现找不到文件。

所以想要访问/flag/1.php得到 2.php的内容的话:修改location /flag { rewrite ^(.*)$ /1.php last 为 location ^~ /flag { rewrite ^(.*)$ /1.php last

5.nginx location的url 匹配优先级:

            1、=  首先是精准匹配优先级最高

            2、^~ 其次是以某特定常规字符串开头的匹配,这个不是正则

            3、~ 、 ~*、!~、!~* 再次是按顺序的正则匹配,依次为区分大小写的正则匹配、不区分大小写的正则匹配、依次为区分大小写的正则不匹配、不区分大小写的正则不匹配、

            4、最后是 / 的通用符匹配

            以上依次为nginx location的url 匹配优先级

 

location优先级示例

配置项如下:

 
  1. location = / {
  2. # 仅仅匹配请求 /
  3. [ configuration A ]
  4. }
  5. location / {
  6. # 匹配所有以 / 开头的请求。
  7. # 但是如果有更长的同类型的表达式,则选择更长的表达式。
  8. # 如果有正则表达式可以匹配,则优先匹配正则表达式。
  9. [ configuration B ]
  10. }
  11. location /documents/ {
  12. # 匹配所有以 /documents/ 开头的请求。
  13. # 但是如果有更长的同类型的表达式,则选择更长的表达式。
  14. # 如果有正则表达式可以匹配,则优先匹配正则表达式。
  15. [ configuration C ]
  16. }
  17. location ^~ /images/ {
  18. # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。
  19. # 所以,即便有符合的正则表达式location,也不会被使用
  20. [ configuration D ]
  21. }
  22. location ~* \.(gif|jpg|jpeg)$ {
  23. # 匹配所有以 gif jpg jpeg结尾的请求。
  24. # 但是 以 /images/开头的请求,将使用 Configuration D
  25. [ configuration E ]
  26. }

请求匹配示例

 
  1. / -> configuration A
  2. /index.html -> configuration B
  3. /documents/document.html -> configuration C
  4. /images/1.gif -> configuration D
  5. /documents/1.jpg -> configuration E

注意,以上的匹配和在配置文件中定义的顺序无关。

转载于:https://my.oschina.net/u/3367404/blog/2934060

相关文章:

  • webpack执行命令参数
  • spark-join算子
  • nodejsvuewebpack
  • jmeter连接数据库之增删改查
  • 设计模式是什么鬼(享元)
  • rsync+sersync实现数据实时同步
  • 「Main」
  • 8.XML相关对象
  • 野生前端的数据结构基础练习(8)——图
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • HyperLeger Fabric SDK开发(二)——Fabric SDK配置
  • Python函数高级
  • JVM 参数调优
  • 参数为空取全部数据的几种做法
  • Chisel3 - 基本数据类型
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Javascript 原型链
  • JDK 6和JDK 7中的substring()方法
  • leetcode-27. Remove Element
  • python3 使用 asyncio 代替线程
  • Python3爬取英雄联盟英雄皮肤大图
  • Spark学习笔记之相关记录
  • 从零开始的无人驾驶 1
  • 京东美团研发面经
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 开源SQL-on-Hadoop系统一览
  • 区块链技术特点之去中心化特性
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 详解NodeJs流之一
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​linux启动进程的方式
  • #define、const、typedef的差别
  • #图像处理
  • (0)Nginx 功能特性
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (笔试题)分解质因式
  • (二)丶RabbitMQ的六大核心
  • (分享)自己整理的一些简单awk实用语句
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (一)为什么要选择C++
  • .NET MVC第三章、三种传值方式
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net6 webapi log4net完整配置使用流程
  • []常用AT命令解释()
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [ARM]ldr 和 adr 伪指令的区别
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]winform部署yolov9的onnx模型
  • [C#7] 1.Tuples(元组)
  • [Codeforces] number theory (R1600) Part.11
  • [CSS] - 修正IE6不支持position:fixed的bug
  • [C进阶] 数据在内存中的存储——浮点型篇