Nginx rewrite 中break与last指令的区别
Posted cat_crazy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx rewrite 中break与last指令的区别相关的知识,希望对你有一定的参考价值。
PS:原创文章,如需转载,请注明出处,谢谢!
本文地址:http://flyer0126.iteye.com/blog/2257670
nginx rewrite指令
语法:rewrite regex replacement [flag];
默认值:无
作用域:server,location,if
如果一个URI匹配指定的正则表达式regex,URI就按照replacement重写。
rewrite按配置文件中出现的顺序执行。flags标志可以停止/继续处理。
如果replacement以”http://”或”https://”开始,将不再继续处理,这个重定向将返回给客户端。
flag可以是如下参数:
last 停止处理后续rewrite指令集,然后对当前重写的新URI在rewrite指令集上重新查找。
break 停止处理后续rewrite指令集,并不在重新查找。
redirect 如果replacement不是以http:// 或https://开始,返回302临时重定向
permant 返回永久重定向的HTTP状态301 ※原有的url支持正则 重写的url不支持正则
最终完整的重定向URL包括请求scheme(http://,https://等),请求的server_name_in_redirect和 port_in_redirec三部分,说白了也就是http协议 域名 端口三部分组成。
示例如下:
- location /break/ {
- rewrite ^/break/(.*) /test/$1 break;
- return 402;
- }
- location /last/ {
- rewrite ^/last/(.*) /test/$1 last;
- return 403;
- }
- location /test/ {
- return 508;
- }
请求: http://domain/break/*
返回:404
请求: http://domain/last/*
返回:508
原因:根据上述内容,break与last都停止处理后续rewrite指令集,不同之处在与last会重新发起新的请求,而break不会。当请求break时,如匹配内容存在的话,可以直接请求成功,返回200;而如果请求内容不存在,则返回404。当请求为last的时候,会对重写的新uri重新发起请求,如上例则返回508。
总结:last与break都停止处理后续rewrite指令集,最大的不同是,last会重新发起一个新请求,并重新匹配location。
以上是关于Nginx rewrite 中break与last指令的区别的主要内容,如果未能解决你的问题,请参考以下文章
Nginx rewrite 中break与last指令的区别
Nginx中的rewrite指令(break,last,redirect,permanent)