全部產品
Search
文件中心

CDN:重寫回源URL

更新時間:Feb 08, 2025

阿里雲CDN支援URL重寫,重寫不影響CDN內部鏈路和緩衝key,僅在回源請求時使用重寫後的URL。

工作原理

通過重寫回源URL規則,使請求URL與來源站點URL匹配,準確擷取來源站點的資源,或者傳遞指定的參數給來源站點。

  • 執行規則設定為“空”或者“break”的情況下,僅重寫URL中的資源路徑部分。

    無標題文檔-流程圖

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

    zh-enhance_break

注意事項

  • 單個網域名稱可以配置的重寫回源URL規則數量上限是50個。

  • 規則重寫按照規則列表從上到下順序依次執行,因此順序可能會影響您的重寫結果。

  • 配置重寫回源URL規則時,可能與網域名稱管理 > 效能最佳化頁簽下的忽略參數功能衝突,配置時要需注意避免衝突。

重寫訪問URL和重寫回源URL的區別

功能

作用對象

用戶端體驗

應用情境

重寫訪問URL

影響的是用戶端訪問的URL,同時也會改變CDN節點回源的URL。

用戶端看到的URL與實際訪問的URL不一致,會發生變化。

常用於將舊網域名稱的URL遷移、映射到新網域名稱;或者為移動端和PC端提供不同的URL。

樣本:訪問old.example.com/hello時,重寫訪問URL為new.example.com/hello

重寫回源URL

影響的是CDN節點回源時訪問的URL,而用戶端訪問的URL不變。

用戶端看到的URL與實際訪問的URL一致,沒有變化。

常用於隱藏來源站點的真實URL結構,保護來源站點資訊;或者通過URL映射,讓CDN節點回源到不同的來源站點目錄。

樣本:訪問cdn.example.com/hello時重寫回源URL為origin.example.com/source/hello

重寫訪問URL示意圖

  1. 用戶端向CDN發起請求,請求的URL為old.example.com/hello

  2. CDN接收到請求後,根據重寫訪問URL規則,CDN節點會在給用戶端發送的302狀態代碼響應資訊的HTTP Location頭部中放置新的URL地址資訊,將請求的URL重寫為new.example.com/hello

  3. 用戶端收到302狀態代碼響應之後,將會向新的URL地址發起請求。

  4. CDN節點檢查緩衝,如果緩衝中有重寫後URL的內容,直接返回給用戶端;如果沒有,則CDN節點向來源站點發起請求,請求的URL為重寫後的new.example.com/hello

  5. 來源站點接收到請求,返迴響應內容給CDN節點。

  6. CDN節點將響應內容緩衝,並返回給用戶端。

重寫回源URL示意圖

  1. 用戶端向CDN發起請求,請求的URL為cdn.example.com/files/hello.txt

  2. CDN接收到請求後,檢查緩衝,如果緩衝中有請求URL的內容,直接返回給用戶端;如果沒有,則CDN節點根據重寫回源URL規則,將回源URL重寫為 origin.example.com/secret/files/hello.txt,向來源站點發起請求。

  3. 來源站點接收到請求後,向CDN節點返迴響應內容。

  4. CDN節點將響應內容緩衝,並返回給用戶端。

配置回源URL

  1. 登入CDN控制台

  2. 在左側導覽列,單擊域名管理

  3. 域名管理頁面,找到目標網域名稱,單擊操作列的管理

  4. 在指定網域名稱的左側導覽列,單擊回源配置

  5. 單擊重寫回源URL頁簽。

  6. 單擊添加根據您的需求,配置待重寫的Path目標Path执行规则

    改寫回源URI

    參數

    樣本

    說明

    待重寫的Path

    ^/hello$

    以正斜線(/)開頭的URL,不含http://頭及網域名稱。必須使用PCRERegex。

    目標Path

    /hello/test

    以正斜線(/)開頭的URL,不含http://頭及網域名稱。支援使用PCRERegex。

    执行规则

    如果配置了多條規則,在匹配執行當前規則後,將按照從上到下的順序依次執行所有可以匹配的規則。

    break

    • 如果配置了多條規則,若請求的URL匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。

    • 只修改URL中的資源路徑部分,不修改URL的參數,因此不會影響重寫回源URL功能對URL中參數的重寫。

    enhance break

    • 如果配置了多條規則,若請求的URL匹配了當前規則,匹配執行完當前規則後,剩餘規則將不再匹配。

    • 與break相似,但是增加了對URL中參數部分的重寫能力,對URL中參數的重寫可能會與回源參數重寫功能產生衝突,因此在同時配置這兩個功能時,需要注意避免配置衝突。

  7. 單擊確定,使重寫規則開始執行和生效。

    您也可以在重寫回源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,所以不再匹配後續規則。