Nginx之詳解 rewrite URI重寫
more conf/fastcgi.conf 相關的內建變數
rewrite功能
使用nginx提供的全域性變數或自己設定的變數,結合正則表示式和標誌位實現url重寫以及重定向。rewrite只能放在server{}, location{}, if{}中,並且只能對域名後邊的除去傳遞的引數外的字串起作用,例如 http://seanlook.com/a/we/index.php?id=1&u=str 只對/a/we/index.php重寫。
if中的條件怎麼寫?
1: = 來判斷相等,用於字串比較
2:~ 用正則來匹配(此處的正則區分大小寫)
~* 不區分大小寫
3: -f -d -e 來判斷是否為檔案,為目錄,是否存在
rewrite 企業應用場景
1.為了讓搜尋引擎搜錄網站內容及使用者體驗更好,企業會將動態URL地址偽裝成靜態地址提供服務。
2.網址換新域名後,讓舊的訪問跳轉到新的域名上。例如,訪問京東的360buy.com會跳轉到jd.com
rewrite語法格式
及引數
語法格式 rewrite regex replacement [flag];
正則 替代內容 flag標記
引數介紹:
rewrite是關鍵字
regex是正則表示式
URL是要替代的內容
[flag]是標記位的意思,它有以下幾種值:
last: 相當於Apache的[L]標記,表示完成rewrite
break: 終止rewrite,不再繼續匹配
redirect: 返回302臨時重定向,位址列會顯示跳轉後的地址
permanent: 返回301永久重定向,位址列會顯示跳轉後的地址
很多情況下,rewrite也會寫在location裡,預設它們的執行順序是:
1. 執行server塊的rewrite指令
2. 執行location匹配
3. 執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新迴圈執行1-3,直到找到真實存在的檔案;迴圈超過10次,則返回500 Internal Server Error錯誤。
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
如果UA包含"MSIE",rewrite 請求到 /msid/ 目錄下
break 表示 終止rewrite,不再繼續匹配