首页 > 资讯列表 > 编程/数据库 >> PHP

nginx rewrite中break与last指令区别

PHP 2014-11-29 21:59:08 转载来源: 网络整理/侵权必删

last与break的区别在于,last并不会停止对下面location的匹配,break则匹配后立即跳出,不会再进行后面的规则匹配. rewrite 指令末尾的break应该与单独写break作用是不同的,比如: if ($slow) {   limit_rate  10k;   break; } nginx对待rewrite中的break使用了单独的代码处理去此命令。 测验一下break与last的区别 location /test1.txt/ { rewrite /test1.txt/  /test2.txt break; } location ~ test2.txt { return 123; } 使用break会停止匹配下面的location,直接发起请求www.domain.com/test2.txt,由于不存在文件test2.txt,则会直接显示404

lastbreak区别在于,last并不会停止对下面location的匹配,break则匹配后立即跳出,不会再进行后面的规则匹配.
rewrite 指令末尾的break应该与单独写break作用是不同的,比如:

if ($slow) {
  limit_rate  10k;
  break;
}

nginx对待rewrite中的break使用了单独的代码处理去此命令。

测验一下break与last的区别

location /test1.txt/ {

rewrite /test1.txt/  /test2.txt break;

}

location ~ test2.txt {
return 123;
}


使用break会停止匹配下面的location,直接发起请求www.domain.com/test2.txt,由于不存在文件test2.txt,则会直接显示404。
使用last的话,会继续搜索下面是否有符合条件(符合重写后的/test2.txt请求)的location。此时,/test2.txt刚好与面location的条件对应上了,进入花括号{}里面的代码执行,这里会返回123。


在nginx的源码中处理break与last完全分成了不同的代码块来处理:

if (ngx_strcmp(value[3].data, "last") == 0) {‘
last = 1;

....................


} else if (ngx_strcmp(value[3].data, "break") == 0) {
regex->break_cycle = 1;
last = 1;
....................
}

从上面看到是对数组的第三个元素专门进行处理。
重写代码"rewrite /2a.txt/ /2b.txt break;"中的break指令刚好是在第四(0开始数刚好是用3访问)个位置处。

 


标签: nginx rewrite break last 指令 区别


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持