1. 程式人生 > >Nginx之詳解 rewrite URI重寫

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,不再繼續匹配