`
nigelzeng
  • 浏览: 599305 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

nginx里的break和last

阅读更多

break和last是nginx的rewrite_module里的指令,tengine翻译的文档里对这两个的指令解释是:

 

last
停止执行当前这一轮的ngx_http_rewrite_module指令集,然后查找匹配改变后URI的新location;
break
停止执行当前这一轮的ngx_http_rewrite_module指令集;

 

 

就我所知,这两个指令都可以用来实现内部重定向(internal redirect),我经常有疑问,这两个指令具体的区别是什么呢?昨天总算弄清楚了一点,请往下看:

 

我定义了一个虚拟主机 "nigel.zeng.me" :

 

server {
listen 80 default_server;
server_name nigel.zeng.me;
root www;
access_log logs/nigel.log main;

location /foo/ {
    rewrite ^/foo/(.*) /test/$1 break;
          echo "break keyword";
}

location /bar/ {
      rewrite ^/bar/(.*) /test/$1 last;
          echo "last keyword";
}

location /test/ {
       valid_referers none server_names ~nigel\.zeng\.me;
              if ($invalid_referer) {
                        return 403;
                  }
}
}

 

里面定义了的两个location,第一个用来处理 http://nigel.zeng.me/foo/*** 的情况,使用break来做内部重定向,把http://nigel.zeng.me/foo/***  重写为 http://nigel.zeng.me/test/***;

第二个location用来处理http://nigel.zeng.me/bar/*** 的情况,使用last来做内部重定向,也是重定向到http://nigel.zeng.me/test/***。

echo指令是agentzh所编写的echo-nginx-module第三方模块里带的。

 

这里准备的两个url是 http://nigel.zeng.me/foo/index.html 和 http://nigel.zeng.me/bar/index.html。

内部重定向后的页面 http://nigel.zeng.me/test/index.html 如下:


按照tengine的中文文档里介绍的,break指令会停止去匹配新的location,而last指令则会去查找匹配改变后URI的新location,那么按照上面的配置,访问第一个URL “http://nigel.zeng.me/foo/index.html“ 会返回 "break keyword" 字段,而访问 ”http://nigel.zeng.me/bar/index.html“ 则会返回 http://nigel.zeng.me/test/index.html 的结果。

 

OK,看看测试结果:

访问第一个URL “http://nigel.zeng.me/foo/index.html“:

访问第二个URL ”http://nigel.zeng.me/bar/index.html“:

所以从测试结果可以得出以下结论:

1、rewrite后接break指令,完成rewrite之后会执行完当前的location(或者是if)指令里的其他内容(停止执行当前这一轮的ngx_http_rewrite_module指令集),然后不进行新URL的重新匹配。

2、rewrite后接last指令,在完成rewrite之后停止执行当前这一轮的ngx_http_rewrite_module指令集已经后续的指令,进而为新的URL寻找location匹配。

 

结果仅供参考。

 

-----EOF------

 

have fun.

 

-- nigelzeng

 

  • 大小: 32.8 KB
  • 大小: 15.3 KB
  • 大小: 28.6 KB
分享到:
评论
1 楼 snowing0427 2015-01-13  
特地登录来感谢一下楼主~!!!

相关推荐

    Nginx配置的rewrite编写时last与break的区别分析

    在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是...2、使用proxy_pass指定源:使用last和break都可以 3、使用alias指定

    浅谈apache和nginx的rewrite的区别

    Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下: rewrite ^/b/(.*)\.html /play.php?video=$1 break; 如果加上if语句,示例如下...

    nginx rewrite重写规则与防盗链配置方法教程详解

    导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。...break – 中止Rewirte,不在继续匹配 redirect

    nginx重写rewrite基础及实例分享

    last 相当于Apache里的[L]标记,表示完成rewrite break 终止匹配, 不再匹配后面的规则。 redirect 返回302临时重定向 地址栏会显示跳转后的地址。 permanent 返回301永久重定向 地址栏会显示跳转后的地址。  

    Nginx服务器中的重定向配置参考指南

    nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记...

    Nginx Rewrite规则与使用介绍和技巧实例

    一.正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!...2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。 3.redirect 返回302临时重定向,浏览器地址会显示

    nginx-insight

    nginx洗冤录,包含工作...break和last的区别; location寻址; http 304响应的相关内容; nginx中400, 408, 411的分析; 新增nginx1.4.2版本bug导致的411响应; 新增nginx proxy_read_timeout设置不合理导致的400影响;

    nginx 开启 pathinfo的过程详解

    apache往nginx去转,代码端用到了$_SERVER[‘PATH_INFO’],对于nginx默认是不开启pathinfo的。所以我们就要手动开启 1,url重写 location / { //方法1 if (!-e $request_filename) { rewrite ^/(.*)$ /index....

    nginx rewrite 伪静态配置参数详细说明

    * last 相当于Apache里的[L]标记,表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久重定向 地址栏会显示跳转后的地

    七牛魔签 完美运营级别+IOS一键签名程序+app超级签名一键分发平台

    IOS APP 超级签名一键分发平台(七牛魔签)是一款 app 分发源码-app 签名-完美运营级别IOS 一键签名程序,该系统... break; } } 数据库配置文件:/data/conf/database.php 后台地址:域名/HNYMWL001 后台账户:admin

    Nginx 转发匹配规则的实现

    一、正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 ... break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。 redirect 返回302临时重定

    汽车理财区块链程序源码.zip

    服务器系统:Linux+宝塔 亲测环境:Nginx1.16.1+PHP5.6+Mysql5.5 ... break; } } 先暂停,等他上传完成 后台地址:/admin 后台用户:admin 后台密码:3eym.com 前台账号:18888888888 前台密码:123456

    【微盘】基金宝余额宝版[已删除广告+已清后门]

    服务器系统:Linux + Centos7.x + 宝塔 亲测环境:Nginx 1.18.0 + PHP5.6 + Mysql5.5 ... break; } } 行情:/colleraaa.html【浏览器打开,别关闭】 特别说明:服务器需要支持访问境外网站 否则行情+K线无效

    nginx rewrite 伪静态配置参数和使用例子

    -x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久...

    国内一些常用PHP的CMS的Nginx服务器的伪静态规则整理

    但很多网友还是不太了解Nginx服务器的伪静态规则的,而如果你安装的是一些常用的程序,如WordPress,PHPCMS,ECSHOP,SHOPEX,Discuz 7,那伪静态规则就有现成的了。为方便各位站长,收集了这几个常用程序的伪静态...

    全新API接口管理系统PHP源码.zip

    Nginx请设置如下伪静态 Apache无需配置 运行目录默认即可 location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } } 将程序上传至网站根目录,访问域名/install进行安装操作

    Nginx Rewrite使用场景及配置方法解析

    Nginx Rewrite使用场景 1.URL地址跳转,例如用户访问pm.com将其跳转到baidu.com或者当用户通过http的方式访问时,将其跳转至https的方式访问。 2.URL伪静态,将动态页面显示为静态页面方式的一种技术,减少动态URL地址...

    在phpstudy集成环境下的nginx服务器下配置url重写

    直接在对应的vhosts.conf配置文件的location / {}中添加以下内容: location / { ... #autoindex on; if (!-e $request_filename) { ...以上所述是小编给大家介绍的在phpstudy集成环境下的nginx服

Global site tag (gtag.js) - Google Analytics