如果來源站點資源路徑變化,CDN節點資源路徑也會變化。使用者請求的URL路徑不變時,CDN節點需要重寫請求的URL,將其重新導向到目標路徑,以減少回源並提升用戶端訪問效能。
背景資訊
HTTP 302狀態代碼(302 Found)表示資源臨時改變位置。配置訪問URL重寫後,CDN節點會在HTTP Location頭部放置新的URL,用戶端收到302響應後會請求新的URL。
配置訪問URL重寫規則後,CDN節點預設發送302狀態代碼,同時也支援303和307狀態代碼,如果您需要修改狀態代碼,可以通過提交工單申請。
|
編碼 |
含義 |
處理方法 |
典型應用情境 |
|
302 |
Found |
GET方法不會發生變更,其他方法有可能會變更為GET方法。 |
由於不可預見的原因該頁面暫不可用。在這種情況下,搜尋引擎不會更新它們的連結。 |
|
303 |
See Other |
GET方法不會發生變更,其他方法會變更為 GET 方法(訊息主體會丟失)。 |
用於PUT或POST請求完成之後進行頁面跳轉,防止由於頁面重新整理導致的操作的重複觸發。 |
|
307 |
Temporary Redirect |
方法和訊息主體都不發生變化。 |
由於不可預見的原因該頁面暫不可用。在這種情況下,搜尋引擎不會更新它們的連結。當網站支援非 GET 方法的連結或操作的時候,該狀態代碼優於 302 狀態代碼。 |
單個網域名稱最多可以配置50條重寫規則。配置多條規則時,按照CDN控制台訪問URL重寫列表由上而下的順序執行。
重寫訪問URL和重寫回源路徑的區別
|
功能 |
作用對象 |
用戶端體驗 |
應用情境 |
|
影響的是用戶端訪問的URL,同時也會改變CDN節點回源的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節點將響應內容緩衝,並返回給用戶端。
重寫回源路徑示意圖
-
用戶端向CDN發起請求,請求的URL為
cdn.example.com/files/hello.txt。 -
CDN接收到請求後,檢查緩衝,如果緩衝中有請求URL的內容,直接返回給用戶端;如果沒有,則CDN節點根據重寫回源URL規則,將回源URL重寫為
origin.example.com/secret/files/hello.txt,向來源站點發起請求。 -
來源站點接收到請求後,向CDN節點返迴響應內容。
-
CDN節點將響應內容緩衝,並返回給用戶端。
操作步驟
登入CDN控制台。
在左側導覽列,單擊域名管理。
在域名管理頁面,找到目標網域名稱,單擊操作列的管理。
在指定網域名稱的左側導覽列,單擊缓存配置。
-
單擊重寫訪問URL頁簽。
-
單擊添加,根據您的實際需求,配置訪問URL重寫參數。
參數
說明
待重寫的Path
僅支援以
/開頭的Path,不含協議頭和網域名稱;支援PCRERegex,如^/hello$。URL中
#號後的內容屬於用戶端片段標識符(Fragment Identifier),瀏覽器不會將其發送到服務端,因此CDN重寫規則無法匹配#後的路徑。如需對含#片段的URL配置跳轉,應精確匹配#前的路徑部分,並為每個目標地址分別配置獨立的重寫規則。目標Path
-
執行規則設定為break的情況下,僅支援以
/開頭的Path,不含協議頭和網域名稱。 -
執行規則設定為Redirect的情況下,可以包含協議頭和網域名稱。支援PCRERegex,例如:常用
$1、$2來捕獲待改寫Path中圓括弧內的字串。
执行规则
-
預設支援Redirect和break這兩種規則。
-
Redirect:如果請求URL匹配了某條規則,該請求將會被302重新導向到目標URL,節點返回給用戶端的Location資訊為目標URL(不修改原始URL中的參數)。執行完當前規則後,當存在其他配置規則時,會繼續匹配剩餘規則。
-
break:如果請求URL匹配了某條規則,該請求將會被重寫為目標URL(不修改原始URL中的參數)。執行完當前規則後,當存在其他配置規則時,將不再匹配剩餘規則。
-
-
同時支援空、enhance-break和enhance_redirect三種規則,這三種規則需要提交工單申請後台配置。
-
空 : 配置了多條規則的情況下,如果請求URL匹配了某條規則,執行完當前規則以後,還會繼續匹配後續規則。
-
enhance_break : 和 break類似,但是會修改包含參數在內的整個URL。
-
enhance_redirect : 和redirect類似,但是會修改包含參數在內的整個URL。
-
說明不同的執行規則使用的重寫方式不同,重寫後的URL是否支援其他網域名稱、其他協議也存在差異:
-
空、Break、enhance_break採用直接重寫使用者請求URL的方式,不支援重寫為其他網域名稱,也不支援重寫為其他協議(例如從HTTP協議重寫為HTTPS協議)。
-
Redirect、enhance_redirect採用302跳轉方式實現URL重寫,支援重寫為其他網域名稱,也支援重寫為其他協議:
-
302 Location地址除了可以設定為當前的加速網域名稱,還支援設定為其他網域名稱,可以實現這樣的效果:原始URL使用的網域名稱是
example.com,重寫後的URL使用新的網域名稱aliyundoc.com。 -
302 Location地址支援使用其他協議,可以實現這樣的效果:原始URL使用HTTP協議,重寫後的URL使用HTTPS協議。
-
規則條件
規則條件能夠對使用者請求中攜帶的各種參數資訊進行識別,以此來決定某個配置是否對該請求生效。
重要引用規則條件時,按所關聯規則條件的優先順序匹配,而非按功能自身的配置順序匹配。
-
不使用:不使用規則條件。
-
若需新增或編輯規則條件,請在規則引擎中進行管理。
Nginx Var
預設為不勾選,勾選後可以在目標URL中使用Nginx內建變數。配置樣本如下:
-
待重寫的Path:
^/test.jpg$ -
目標Path:
/test.${arg_type} -
開啟Nginx變數計算以後實現的效果是會把${nginx_var}值計算出來,${arg_type}表示原始URL中參數type的值。
說明該參數需提交工單申請後台配置。
-
-
單擊確定,完成配置。
成功配置重寫功能後,您可以在重寫列表中,對當前的配置進行修改或删除操作。
配置樣本
樣本1
用戶端請求http://example.aliyundoc.com/hello時,請求中包含/hello,CDN節點會在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$,CDN節點會給用戶端響應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://(.*),CDN節點會給用戶端響應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),瀏覽器不會將該部分發送到服務端。CDN節點收到的實際請求路徑僅為/stories/index.html。因此,配置重寫規則時,待重寫的Path應設定為^/stories/index\.html$來精確匹配#前的路徑部分,目標Path設定為目標URL,執行規則設定為Redirect。
如果多個含不同#片段的舊URL需要跳轉到不同的目標地址,由於服務端無法區分#後的不同內容,需要為每個不同的源路徑分別配置獨立的重寫規則。