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
請求: 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