如果來源站點資源的存放路徑變化,DCDN節點存放資源的路徑也會隨之變化。使用者請求的URL路徑如果沒有變化,就需要DCDN節點來改寫使用者請求的URL,將請求URL重新導向到目標Path,減少回源,提升用戶端訪問效能。
背景資訊
HTTP 302狀態代碼(即302 Found),可表示資源被臨時改變了位置。配置URI重寫後,DCDN節點會在給用戶端發送的302狀態代碼響應資訊的HTTP Location頭部中放置新的URI地址資訊,用戶端收到302狀態代碼響應之後,將會向新的URI地址發起請求。
配置URI重寫規則後,DCDN節點預設給用戶端發送302重新導向狀態代碼,同時也支援303和307重新導向狀態代碼,如果您需要修改重新導向狀態代碼,可以通過提交工單申請。
編碼 | 含義 | 處理方法 | 典型應用情境 |
302 | Found | GET方法不會發生變更,其他方法有可能會變更為GET方法。 | 由於不可預見的原因該頁面暫不可用。在這種情況下,搜尋引擎不會更新它們的連結。 |
303 | See Other | GET方法不會發生變更,其他方法會變更為 GET 方法(訊息主體會丟失)。 | 用於PUT或POST請求完成之後進行頁面跳轉,防止由於頁面重新整理導致的操作的重複觸發。 |
307 | Temporary Redirect | 方法和訊息主體都不發生變化。 | 由於不可預見的原因該頁面暫不可用。在這種情況下,搜尋引擎不會更新它們的連結。當網站支援非 GET 方法的連結或操作的時候,該狀態代碼優於 302 狀態代碼。 |
單個網域名稱最多可以配置50條重寫規則。配置多條規則時,按照DCDN控制台URI重寫列表由上而下的順序執行。
本功能在引用規則引擎中的規則條件時,配置的執行順序不是按照本功能配置的優先順序順序執行,而是按照規則引擎中配置的規則條件的優先順序順序來執行。
適用情境
客戶來源站點的資源存放路徑發生了變更,DCDN節點上的資源存放路徑也發生了變更,但是使用者請求URL裡麵包含的資源路徑沒有變更,這時就需要DCDN節點來改寫使用者請求裡面的資源路徑。例如:圖片檔案原先存放在目錄/download/,現在變更為/image/。
操作步驟
登入DCDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,單擊目標網域名稱對應的配置。
在指定網域名稱的左側導覽列,單擊緩衝配置。
單擊重寫訪問URL頁簽。
單擊添加,根據您的實際需求,配置重寫規則。
參數
說明
待重写URI
僅支援以/開頭的Path,不含協議頭和網域名稱;支援PCRERegex,如 ^/hello$。
目标URI
執行規則設定為Break的情況下,僅支援以
/開頭的Path,不含協議頭和網域名稱。執行規則設定為Redirect的情況下,可以包含協議頭和網域名稱。支援PCRERegex,例如:常用
$1、$2來捕獲待改寫Path中圓括弧內的字串。
执行规则
支援Redirect和Break這兩種規則。
Redirect:如果請求URI匹配了某條規則,該請求將會被302重新導向到目標URI, DCDN節點返回給用戶端的Location資訊為目標URI(不修改原始URI中的參數)。執行完當前規則後,當存在其他配置規則時,會繼續匹配剩餘規則。
Break:如果請求URI匹配了某條規則,該請求將會被改寫為目標URI(不修改原始URI中的參數)。執行完當前規則後,當存在其他配置規則時,將不再匹配剩餘規則。
單擊確定,完成配置。
成功配置重寫功能後,您可以在重寫列表中,對當前的配置進行修改或刪除操作。
配置樣本
樣本1
用戶端請求http://example.aliyundoc.com/hello時,請求中包含/hello,節點會在302狀態代碼的Location資訊裡寫入新的URL地址http://example.aliyundoc.com/index.html,並返回給用戶端,用戶端對http://example.aliyundoc.com/index.html發起請求。
該規則配置中,待重寫的Path為 ^/hello$,目標Path為 /index.html,執行規則選擇 redirect。
用戶端在302重新導向的時候,如果Location中不包含協議頭和網域名稱,那麼會預設使用原始請求的協議頭和網域名稱。
樣本2
用戶端請求http://example.aliyundoc.com/hello時,請求中包含/hello,匹配上了Regex^/hello$,節點會給用戶端響應302狀態代碼,並且在Location資訊裡寫入目標URL https://test.aliyundoc.com/index.html,用戶端收到響應之後,將會對https://test.aliyundoc.com/index.html發起請求。
配置規則:待重寫的Path設定為 ^/hello$,目標Path設定為 https://test.aliyundoc.com/index.html,執行規則設定為 redirect。
樣本3
用戶端請求http://www.example.com/cdn/url/http://image.example.com/image/cat.jpg時,請求中包含/cdn/url/http://,匹配上了Regex^/cdn/url/http://(.*),節點會給用戶端響應302狀態代碼,並且在Location資訊裡寫入目標URL http://image.example.com/image/cat.jpg,用戶端收到響應之後,將會對http://image.example.com/image/cat.jpg發起請求。
配置規則:目標Path設定為 http://$1,執行規則設定為 redirect。
樣本4
用戶端請求http://example.aliyundoc.com/stories/index.html#/voice/318時,URL中#/voice/318屬於用戶端片段標識符(Fragment Identifier),瀏覽器不會將該部分發送到服務端。節點收到的實際請求路徑僅為/stories/index.html。因此,配置重寫規則時,待重寫的Path應設定為^/stories/index\.html$來精確匹配#前的路徑部分,目標Path設定為目標URL,執行規則設定為Redirect。
如果多個含不同#片段的舊URL需要跳轉到不同的目標地址,由於服務端無法區分#後的不同內容,需要為每個不同的源路徑分別配置獨立的重寫規則。
樣本5
配置子目錄首頁:通過訪問子目錄名返回該目錄下的預設首頁檔案,是網站的常見需求。使用訪問URL重寫可以在CDN側實現該能力,無需改動來源站點。例如,首頁檔案為https://www.example.com/cdn/index.html時,完成配置後用戶端請求https://www.example.com/cdn或https://www.example.com/cdn/均可返回該首頁檔案。
配置前請先確認來源站點上的子目錄首頁檔案可以正常訪問,例如https://www.example.com/cdn/index.html能夠正常返回。
用戶端請求的路徑可能以/結尾,也可能不以/結尾,因此需要配置以下兩條規則分別匹配:
規則1:待重寫的Path設定為
^/(.+)/$,目標Path設定為/$1/index.html,執行規則設定為 Break。規則2:待重寫的Path設定為
^/([^.?#]+)$,目標Path設定為/$1/index.html,執行規則設定為 Break。
配置生效後,直接存取子目錄(例如https://www.example.com/cdn),如果能夠正確返回子目錄首頁檔案,說明配置成功。