zoukankan      html  css  js  c++  java
  • 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协议 域名 端口三部分组成。

    示例如下:

    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/*
    返回:404

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

    返回:508

    原因:根据上述内容,break与last都停止处理后续rewrite指令集,不同之处在与last会重新发起新的请求,而break不会。当请求break时,如匹配内容存在的话,可以直接请求成功,返回200;而如果请求内容不存在,则返回404。当请求为last的时候,会对重写的新uri重新发起请求,如上例则返回508。

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

  • 相关阅读:
    P4568 [JLOI2011]飞行路线(分层图)
    打地鼠游戏(贪心)
    雷神领域(并查集真是个好东西)并查集+流氓dp
    P2934 [USACO09JAN]安全出行
    P2893 [USACO08FEB]修路
    P2894 [USACO08FEB]酒店Hotel
    P4145 上帝造题的七分钟2 / 花神游历各国
    P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)
    P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
    day 2 上午 挂饰 背包
  • 原文地址:https://www.cnblogs.com/catcrazy/p/6352115.html
Copyright © 2011-2022 走看看