阿里雲CDN支援URL重寫,重寫不影響CDN內部鏈路和緩衝key,僅在回源請求時使用重寫後的URL。
工作原理
通過重寫回源URL規則,使請求URL與來源站點URL匹配,準確擷取來源站點的資源,或者傳遞指定的參數給來源站點。
執行規則設定為“空”或者“break”的情況下,僅重寫URL中的資源路徑部分。

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

注意事項
單個網域名稱可以配置的重寫回源URL規則數量上限是50個。
規則重寫按照規則列表從上到下順序依次執行,因此順序可能會影響您的重寫結果。
配置重寫回源URL規則時,可能與頁簽下的忽略參數功能衝突,配置時要需注意避免衝突。
重寫訪問URL和重寫回源URL的區別
功能 | 作用對象 | 用戶端體驗 | 應用情境 |
影響的是用戶端訪問的URL,同時也會改變CDN節點回源的URL。 | 用戶端看到的URL與實際訪問的URL不一致,會發生變化。 | 常用於將舊網域名稱的URL遷移、映射到新網域名稱;或者為移動端和PC端提供不同的URL。 樣本:訪問 | |
影響的是CDN節點回源時訪問的URL,而用戶端訪問的URL不變。 | 用戶端看到的URL與實際訪問的URL一致,沒有變化。 | 常用於隱藏來源站點的真實URL結構,保護來源站點資訊;或者通過URL映射,讓CDN節點回源到不同的來源站點目錄。 樣本:訪問 |
重寫訪問URL示意圖
用戶端向CDN發起請求,請求的URL為
old.example.com/hello。CDN接收到請求後,根據重寫訪問URL規則,CDN節點會在給用戶端發送的302狀態代碼響應資訊的HTTP Location頭部中放置新的URL地址資訊,將請求的URL重寫為
new.example.com/hello。用戶端收到302狀態代碼響應之後,將會向新的URL地址發起請求。
CDN節點檢查緩衝,如果緩衝中有重寫後URL的內容,直接返回給用戶端;如果沒有,則CDN節點向來源站點發起請求,請求的URL為重寫後的
new.example.com/hello。來源站點接收到請求,返迴響應內容給CDN節點。
CDN節點將響應內容緩衝,並返回給用戶端。
重寫回源URL示意圖
用戶端向CDN發起請求,請求的URL為
cdn.example.com/files/hello.txt。CDN接收到請求後,檢查緩衝,如果緩衝中有請求URL的內容,直接返回給用戶端;如果沒有,則CDN節點根據重寫回源URL規則,將回源URL重寫為
origin.example.com/secret/files/hello.txt,向來源站點發起請求。來源站點接收到請求後,向CDN節點返迴響應內容。
CDN節點將響應內容緩衝,並返回給用戶端。
配置回源URL
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊回源配置。
單擊重寫回源URL頁簽。
單擊添加。根據您的需求,配置待重寫的Path、目標Path和执行规则。

參數
樣本
說明
待重寫的Path
^/hello$
以正斜線(/)開頭的URL,不含http://頭及網域名稱。必須使用PCRERegex。
目標Path
/hello/test
以正斜線(/)開頭的URL,不含http://頭及網域名稱。支援使用PCRERegex。
执行规则
空
如果配置了多條規則,在匹配執行當前規則後,將按照從上到下的順序依次執行所有可以匹配的規則。
break
如果配置了多條規則,若請求的URL匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。
只修改URL中的資源路徑部分,不修改URL的參數,因此不會影響重寫回源URL功能對URL中參數的重寫。
enhance break
如果配置了多條規則,若請求的URL匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。
與break相似,但是增加了對URL中參數部分的重寫能力,對URL中參數的重寫可能會與回源參數重寫功能產生衝突,因此在同時配置這兩個功能時,需要注意避免配置衝突。
單擊確定,使重寫規則開始執行和生效。
您也可以在重寫回源URL頁面的規則列表中,單擊修改或删除,對當前配置的規則進行相應操作。
配置樣本
樣本一:執行空規則。
待重寫的Path
^/hello$
目標Path
/index.html
執行規則
空
結果說明
原始請求:
http://example.com/hello重寫後的回源請求:
http://example.com/index.html該請求將會繼續匹配重寫回源URL規則列表中其餘的規則。
樣本二:執行break規則。
待重寫的Path
^/hello.jpg$
目標Path
/image/hello.jpg
執行規則
break
結果說明
原始請求:
http://example.com/hello.jpg重寫後的回源請求:
http://example.com/image/hello.jpg該請求將不再繼續匹配重寫回源URL規則列表中其餘的規則。
樣本三:執行enhance break規則。
待重寫的Path
^/hello.jpg?code=123$
目標Path
/image/hello.jpg?code=321
執行規則
enhance break
結果說明
原始請求:
http://example.com/hello.jpg?code=123重寫後的回源請求:
http://example.com/image/hello.jpg?code=321該請求將不再繼續匹配重寫回源URL規則列表中其餘的規則。
樣本四:在檔案名稱是變數的情況下對根目錄添加URL首碼。
例如:將包含/xxx的URL(xxx代表任意檔案名稱,例如:/hello.jpg、/hello.html等等)重寫為/image/xxx,即對根目錄下的任意檔案的URL都插入路徑/image。
待重寫的Path
^(.*)$
說明^表示匹配字串的開始位置;(.*)是一個分組,其中.表示匹配任意單個字元(除了分行符號),*表示匹配前面的字元或分組零次或多次,可以在目標Path中通過$1來調用分組的變數內容;$表示匹配字串的結束位置。所以,^(.*)$的意思是:匹配整個字串,從開始到結束,中間可以包含任一字元(除了分行符號),並將匹配到的內容捕獲到一個分組中。例如,對於字串"hello world"來說,^(.*)$會匹配整個字串,並將"hello world"捕獲到第一個分組中。目標Path
/image$1
說明/image表示匹配字串"/image";$1表示引用第一個捕獲分組的內容,$2表示引用第二個捕獲分組的內容,依此類推。所以,/image$1的意思是:匹配字串"/image"後面緊跟著第一個捕獲分組的內容。例如,如果第一個捕獲分組的內容是"abc",那麼/image$1將匹配字串"/imageabc"。需要注意的是,$1引用的是捕獲分組的內容,而不是字面量"$1"。如果想要匹配字面量"$1",需要使用逸出字元"\$1"。執行規則
break
結果說明
原始請求:
http://example.com/hello.jpg重寫後的回源請求:
http://example.com/image/hello.jpg原始請求:
http://example.com/hello.html重寫後的回源請求:
http://example.com/image/hello.html
該請求將不再繼續匹配回源URL重寫規則列表中其餘的規則。
樣本五:在檔案名稱是變數的情況下對指定目錄添加URL首碼。
例如:將包含/live/xxx的URL(xxx代表任意檔案名稱,例如:/live/hello.jpg、/live/hello.html 等等)重寫為/image/live/xxx,即對目錄/live下的任意檔案的URL都插入路徑/image。
待重寫的Path
^/live/(.*)$
目標Path
/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
該請求將不再繼續匹配回源URL重寫規則列表中其餘的規則。
樣本六:匹配多條規則時,執行空規則。
配置兩條規則如下圖所示:

結果說明:
原始請求:
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,所以不再匹配後續規則。