1. 程式人生 > >nginx配置-Rewrite

nginx配置-Rewrite

rewrite功能就是,使用nginx提供的全域性變數或自己設定的變數,結合正則表示式和標誌位實現url重寫以及重定向。rewrite只能放在server{},location{},if{}中,並且只能對域名後邊的除去傳遞的引數外的字串起作用,例如 http://localhost:8080/test/user/login.do?user=12只對/test/user/login.do重寫。語法rewrite regex replacement [flag];

如果相對域名或引數字串起作用,可以使用全域性變數匹配,也可以使用proxy_pass反向代理。

表明看rewrite和location功能有點像,都能實現跳轉,主要區別在於rewrite是在同一域名內更改獲取資源的路徑,而location是對一類路徑做控制訪問或反向代理,可以proxy_pass到其他機器。很多情況下rewrite也會寫在location裡,它們的執行順序是:

  1. 執行server塊的rewrite指令
  2. 執行location匹配
  3. 執行選定的location中的rewrite指令

如果其中某步URI被重寫,則重新迴圈執行1-3,直到找到真實存在的檔案;迴圈超過10次,則返回500 Internal Server Error錯誤。

 flag標誌位

  • last : 相當於Apache的[L]標記,表示完成rewrite
  • break : 停止執行當前虛擬主機的後續rewrite指令集
  • redirect : 返回302臨時重定向,位址列會顯示跳轉後的地址
  • permanent : 返回301永久重定向,位址列會顯示跳轉後的地址

因為301和302不能簡單的只返回狀態碼,還必須有重定向的URL,這就是return指令無法返回301,302的原因了。這裡 last 和 break 區別有點難以理解:

  1. last一般寫在server和if中,而break一般使用在location中
  2. last不終止重寫後的url匹配,即新的url會再從server走一遍匹配流程,而break終止重寫後的匹配
  3. break和last都能阻止繼續執行後面的rewrite指令