文档章节

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

l
 linjin200
发布于 2018/11/23 15:31
字数 761
阅读 21
收藏 1

理解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

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

© 著作权归作者所有

l

linjin200

粉丝 26
博文 991
码字总数 1162027
作品 0
福州
程序员
私信 提问
nginx rewrite 指令last break区别最详细的解释

总结: rewrite 可以在 server location 块, 正则比配的时候才重写,所以多条 rewrite 顺序靠前且匹配的优先执行。 break跳出rewrite阶段,不会在匹配,进入输出阶段。 last 类似重新发起请...

Tenderrain
2018/07/26
0
0
Nginx的rewrite应用

Rewrite主要的功能是实现URL重写,Nginx 的 Rewrite 规则采用 PCRE Perl 兼容正则表达式的语法进行规则匹配,如相使用 Nginx 的 Rewrite 功能,在编译 Nginx 前要编译安装 PCRE 库。 一,Ngi...

小杨_Ivan
2017/02/10
0
0
第七章:nginx的rewrite规则详解

模块ngxhttprewrite_module 该ngxhttprewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向,并有条件地选择配置。 先给一段官方demo config 一. 正则表达式 ~ 为区分大小写匹配...

FantJ
2018/01/02
0
0
nginx配置location总结及rewrite规则写法

location正则写法 一个示例: 已开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配...

steven
2016/08/16
24
0
nginx配置location总结及rewrite规则写法

location正则写法 一个示例: 已开头表示精确匹配 如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。 开头表示uri以某个常规字符串开头,不是正则匹配 ~ 开头表示区分大小写的正则匹配...

steven
2016/08/16
17
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
54分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
56分钟前
7
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
58分钟前
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部