Nginx rewrite 中break与last指令的区别

PS:原创文章,如需转载,请注明出处,谢谢!     nginx

本文地址: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协议 域名 端口三部分组成。dom

示例以下:url

Conf代码   收藏代码
  1. location /break/ {  
  2.      rewrite ^/break/(.*) /test/$1 break;  
  3.      return 402;  
  4. }  
  5.   
  6. location /last/ {  
  7.      rewrite ^/last/(.*) /test/$1 last;  
  8.      return 403;  
  9. }  
  10.   
  11. location /test/ {  
  12.      return 508;  
  13. }  

请求: http://domain/break/*
返回:404spa

请求: http://domain/last/*server

返回:508blog

缘由:根据上述内容,break与last都中止处理后续rewrite指令集,不一样之处在与last会从新发起新的请求,而break不会。当请求break时,如匹配内容存在的话,能够直接请求成功,返回200;而若是请求内容不存在,则返回404。当请求为last的时候,会对重写的新uri从新发起请求,如上例则返回508。作用域

总结:last与break都中止处理后续rewrite指令集,最大的不一样是,last会从新发起一个新请求,并从新匹配location。get

相关文章
相关标签/搜索