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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM