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
分享到:
相关推荐
在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是...2、使用proxy_pass指定源:使用last和break都可以 3、使用alias指定
Nginx Rewrite规则相关指令有if、rewrite、set、return、break等,其中rewrite是最关键的指令。一个简单的Nginx Rewrite规则语法如下: rewrite ^/b/(.*)\.html /play.php?video=$1 break; 如果加上if语句,示例如下...
导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标记的几种形式,盗链时返回403错误,允许的域名直接跟在第二行的域名后面。...break – 中止Rewirte,不在继续匹配 redirect
last 相当于Apache里的[L]标记,表示完成rewrite break 终止匹配, 不再匹配后面的规则。 redirect 返回302临时重定向 地址栏会显示跳转后的地址。 permanent 返回301永久重定向 地址栏会显示跳转后的地址。
nginx的rewrite相当于apache的rewriterule(大多数情况下可以把原有apache的rewrite规则加上引号就可以直接使用),它可以用在server,location 和IF条件判断块中,命令格式如下: rewrite 正则表达式 替换目标 flag标记...
一.正则表达式匹配,其中: * ~ 为区分大小写匹配 * ~* 为不区分大小写匹配 * !~和!...2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。 3.redirect 返回302临时重定向,浏览器地址会显示
nginx洗冤录,包含工作...break和last的区别; location寻址; http 304响应的相关内容; nginx中400, 408, 411的分析; 新增nginx1.4.2版本bug导致的411响应; 新增nginx proxy_read_timeout设置不合理导致的400影响;
apache往nginx去转,代码端用到了$_SERVER[‘PATH_INFO’],对于nginx默认是不开启pathinfo的。所以我们就要手动开启 1,url重写 location / { //方法1 if (!-e $request_filename) { rewrite ^/(.*)$ /index....
* last 相当于Apache里的[L]标记,表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久重定向 地址栏会显示跳转后的地
IOS APP 超级签名一键分发平台(七牛魔签)是一款 app 分发源码-app 签名-完美运营级别IOS 一键签名程序,该系统... break; } } 数据库配置文件:/data/conf/database.php 后台地址:域名/HNYMWL001 后台账户:admin
一、正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 ... break 本条规则匹配完成后,终止匹配,不再匹配后面的规则。 redirect 返回302临时重定
服务器系统: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线无效
-x用来判断文件是否可执行 flag标记有: * last 相当于Apache里的[L]标记,表示完成rewrite * break 终止匹配, 不再匹配后面的规则 * redirect 返回302临时重定向 地址栏会显示跳转后的地址 * permanent 返回301永久...
但很多网友还是不太了解Nginx服务器的伪静态规则的,而如果你安装的是一些常用的程序,如WordPress,PHPCMS,ECSHOP,SHOPEX,Discuz 7,那伪静态规则就有现成的了。为方便各位站长,收集了这几个常用程序的伪静态...
Nginx请设置如下伪静态 Apache无需配置 运行目录默认即可 location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; break; } } 将程序上传至网站根目录,访问域名/install进行安装操作
Nginx Rewrite使用场景 1.URL地址跳转,例如用户访问pm.com将其跳转到baidu.com或者当用户通过http的方式访问时,将其跳转至https的方式访问。 2.URL伪静态,将动态页面显示为静态页面方式的一种技术,减少动态URL地址...
直接在对应的vhosts.conf配置文件的location / {}中添加以下内容: location / { ... #autoindex on; if (!-e $request_filename) { ...以上所述是小编给大家介绍的在phpstudy集成环境下的nginx服