nginx rewirte 和 location

什麼是rewrite ?

rewrite 顧名思義就是重寫的意思,主要是針對URL進行重寫,採用方法是使用PCRE(Perl Compatible Regular Expressions) perl兼容正則表達式語法進行規則匹配。
其意義所在: 可以規範URL 根據變量來做URL轉向和選擇配置。

執行順序

1.執行server塊的rewrite指令,server {} 內部的rewrite;
2.執行location匹配(後面有介紹location);
3.執行選定的location中的rewrite指令(rewrite 可以寫在location內);
如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件
如果循環超過10次,則返回500 Internal Server Error錯誤

相關指令

return

  • 語法
    return code;
  • 作用
    結束規則集的執行 並返回狀態碼給客戶端,主要用於當url 中含有禁止訪問的資源時給返回一些錯誤碼;
  • 例子
    服務器禁止客戶端訪問 .svn CVS Entries 等目錄文件,可用下列表示
  location ~* /(\.svn|CVS|Entries){
   return 403;  
 }  

if

  • 作用
    用來判斷條件是否滿足,如果滿足則執行大括號裏面的內容,注意:if 不支持嵌套,不支持多個條件&& 和 || 處理。
  • 語法
    if (condition) {...}
  • condition 主要包含一下內容
    1. 當表達式只是一個變量時,如果值爲空或任何以0開頭的字符串都會當做false
    2. 直接比較:使用 == 或者 != 比較變量
    3. 正則匹配: ~ 表示區分大小匹配,~* 表示不區分大小匹配, !~ !~* 與 ~ ~* 相反表示不匹配
    4. -f 與 !-f 判斷文件存在不存在
    5. -d 與 !-d 判斷目錄存在不存在
    6. -e 與 !-e 判斷文件或者目錄存在不存在
    7. -x 與 !-x 判斷文件是否有可執行
  • 例子
if ($host !~ "^((.*\.)?(test\.(com|com\.cn|cn)) {
  return 403;
 }  

set

  • 語法
set $variable value
  • 作用
    定義一個變量並給變量賦值;
  • 例子
set $appname 'hello'

break

  • 作用
    完成當前的規則集,不再處理rewrite指令;
  • 語法
    break

  • 例子

 if ($slow) {
    limit_rate 10k;
    break;
}

rewrite

  • 作用
    重寫URL
  • 語法
    rewrite pattern replacement [flag]

  • flag
    rewrite 語法最後一個參數爲flag, 主要有一下幾個:

    1. last : 相當於Apache的[L]標記,表示完成rewrite
    2. break: 本條規則完成後,終止匹配,不再匹配後面的規則;
    3. redirect: 返回302臨時重定向,地址欄會顯示重定向後的地址;
    4. permanent: 返回301永久重定向,地址欄會顯示重定向後的地址;
      last與 beak 區別:
      這裏寫圖片描述
  • 例子

 rewrite "^(.*)$" http://test.com$1 permanent;

什麼是location

location 與 rewrite 功能很類似,目的都是爲了實現跳轉,不過location 主要針對某一個路徑/具體URL做控制訪問/方向代理,proxy_pass 可以實現轉發至其他機器,rewrite 主要針對路徑做同一域名的路徑做替換,並且rewirte 可以寫在location 內;

location 匹配

  • = : 表示精確匹配
  • ^~ : 表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配別的選項,一般用來匹配目錄
  • ~:表示區分大小的正則匹配
  • ~* :表示不區分大小的正則匹配
  • /:通配符,如果沒有匹配到其他選項,則使用該選項;
    匹配順序 :
    精確匹配(=) > 完整路徑匹配 > ^~ > 正則匹配(~/~*) > 部分路徑匹配 > 通用匹配(/)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章