阿里雲DCDN支援在使用者請求需要回源時進行URI改寫,改寫不影響DCDN的內部鏈路和緩衝key,只會在DCDN節點向來源站點發送回源請求的時候使用改寫後的URL。通過本文您可以瞭解改寫回源URL功能的操作步驟。
適用情境
來源站點的資源路徑發生了變更,客戶來源站點的資源存放路徑發生了變更,但是使用者請求URL裡麵包含的資源路徑沒有變更,這時就需要DCDN節點來改寫回源請求裡面的資源路徑。
例如:圖片檔案原先存放在目錄“/download/”,現在變更為“/image/”。
工作原理
通過改寫回源URI規則,使請求URI與來源站點URI匹配,準確擷取來源站點的資源,或者傳遞指定的參數給來源站點。
執行規則設定為“空”或者“break”的情況下,僅改寫URI中的資源路徑部分。

執行規則設定為“enhance_break”的情況下,能夠同時改寫資源路徑和請求參數。

注意事項
單個網域名稱可以配置的回源URI改寫規則數量上限是50個。
規則改寫按照規則列表從上到下順序執行的,此順序可能會影響您的改寫結果。
回源URI改寫功能與重寫功能的區別在於,重寫功能的作用位置是在DCDN邊緣節點上面,會影響DCDN內部鏈路,也會改寫緩衝key,而回源URI改寫功能的作用位置是在DCDN回源節點上面,不影響DCDN內部鏈路,不改寫緩衝key。
回源URI改寫功能在配置執行規則的情況下,對URL中參數的改寫可能會與頁簽下的過濾參數功能相衝突,同時配置的時候,需要注意避免配置衝突。
配置回源URI
登入DCDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的配置。
在指定網域名稱的左側導覽列,單擊回源配置。
單擊回源URI改寫頁簽。
在回源URI改寫頁簽,單擊添加。
根據您的需求,配置需要改寫的URI、目標URI和執行規則。

參數
樣本
說明
需要改寫的URI
^/hello$
以正斜線(/)開頭的URI,不含http://頭及網域名稱。必須使用PCRERegex。
目標URI
/hello/test
以正斜線(/)開頭的URI,不含http://頭及網域名稱。支援使用PCRERegex。
執行規則
空
如果配置了多條規則,在匹配執行當前規則後,按照從上到下順序依次執行可以匹配的所有規則。
break
如果配置了多條規則,若請求的URI匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。
只修改URI中的資源路徑部分,不修改URL的參數,不影響改寫回源參數功能對URL中參數的改寫。
enhance_break
如果配置了多條規則,若請求的URI匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。
與break相似,但是增加了對URL中參數部分的改寫能力,對URL中參數的改寫可能會與改寫回源參數功能對URL中參數的改寫相衝突,這兩個功能同時配置的時候,需要注意避免配置衝突。
單擊確定,使改寫規則開始執行和生效。
您也可以在回源URI改寫頁面的規則列表中,單擊修改或刪除,對當前配置的規則進行相應操作。
配置樣本
範例一:執行空規則。
待改寫URI
^/hello$
目標URI
/index.html
執行規則
空
結果說明
原始請求:
http://aliyundoc.com/hello改寫後的回源請求:
http://aliyundoc.com/index.html該請求將會繼續匹配回源URI改寫規則列表中其餘的規則。
範例二:執行break規則。
待改寫URI
^/hello.jpg$
目標URI
/image/hello.jpg
執行規則
break
結果說明
原始請求:
http://example.com/hello.jpg改寫後的回源請求:
http://example.com/image/hello.jpg該請求將不再繼續匹配回源URI改寫規則列表中其餘的規則。
範例三:執行enhance break規則。
待改寫URI
^/hello.jpg?code=123$
目標URI
/image/hello.jpg?code=321
執行規則
enhance break
結果說明
原始請求:
http://example.com/hello.jpg?code=123改寫後的回源請求:
http://example.com/image/hello.jpg?code=321該請求將不再繼續匹配回源URI改寫規則列表中其餘的規則。
範例四:在檔案名稱是變數的情況下對根目錄添加URI首碼。
例如:將包含/xxx的URI(xxx代表任意檔案名稱,例如:/hello.jpg、/hello.html等等)改寫為/image/xxx,即對根目錄下的任意檔案的URI都插入路徑/image。
待改寫URI
^(.*)$
說明^(.*)$代表任一字元,()代表的是一個分組,可以在目標URI中通過$1來調用分組的變數內容。
目標URI
/image$1
說明$1表示Regex中第一對圓括弧中的運算式匹配到的內容,$2是第二個小括弧裡面的內容,依此類推。
執行規則
break
結果說明
原始請求:
http://example.com/hello.jpg改寫後的回源請求:
http://example.com/image/hello.jpg原始請求:
http://example.com/hello.html改寫後的回源請求:
http://example.com/image/hello.html
該請求將不再繼續匹配回源URI改寫規則列表中其餘的規則。
範例五:在檔案名稱是變數的情況下對指定目錄添加URI首碼。
例如:將包含/live/xxx的URI(xxx代表任意檔案名稱,例如:/live/hello.jpg、/live/hello.html 等等)改寫為/image/live/xxx,即對目錄/live下的任意檔案的URI都插入路徑/image。
待改寫URI
^/live/(.*)$
目標URI
/image/live/$1
執行規則
break
結果說明
原始請求:
http://example.com/live/hello.jpg改寫後的回源請求:
http://example.com/image/live/hello.jpg原始請求:
http://example.com/live/hello.html改寫後的回源請求:
http://example.com/image/live/hello.html
該請求將不再繼續匹配回源URI改寫規則列表中其餘的規則。
範例六:匹配多條規則時,執行空規則。
配置兩條規則如下圖所示:

結果說明:
原始請求:
http://example.com/image_01.png改寫後的回源請求:
http://example.com/image/image_02.png說明先匹配第一條規則,改寫為
http://example.com/image_02.png,繼續匹配第二條規則,最終改寫為http://example.com/image/image_02.png。範例七:匹配多條規則時,執行break規則。
配置兩條規則如下圖所示:

結果說明:
原始請求:
http://example.com/image_01.png改寫後的回源請求:
http://example.com/image_02.png說明先匹配第一條規則,改寫為
http://example.com/image_02.png,由於第一條規則設定為break,所以不再匹配後續規則。