如果源站資源的存放路徑變化,CDN節點存放資源的路徑也會隨之變化。用戶請求的URL路徑如果沒有變化,就需要CDN節點來重寫用戶請求的URL,將請求URL重定向到目標Path,減少回源,提升客戶端訪問性能。
背景信息
HTTP 302狀態碼(即302 Found),可表示資源被臨時改變了位置。配置訪問URL重寫后,CDN節點會在給客戶端發送的302狀態碼響應信息的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的區別
功能 | 作用對象 | 客戶端體驗 | 應用場景 |
影響的是客戶端訪問的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節點將響應內容緩存,并返回給客戶端。
操作步驟
登錄CDN控制臺。
在左側導航欄,單擊域名管理。
在域名管理頁面,找到目標域名,單擊操作列的管理。
在指定域名的左側導航欄,單擊緩存配置。
單擊重寫訪問URL頁簽。
單擊添加,根據您的實際需求,配置訪問URL重寫參數。
參數
說明
待重寫的Path
執行規則設置為Break的情況下,僅支持以
/
開頭的Path,不含協議頭和域名;執行規則設置為Redirect的情況下,可以包含協議頭和域名。支持PCRE正則表達式,如
^/hello$
。
目標Path
執行規則設置為Break的情況下,僅支持以
/
開頭的Path,不含協議頭和域名。執行規則設置為Redirect的情況下,可以包含協議頭和域名。支持PCRE正則表達式,例如:常用
$1
、$2
來捕獲待改寫Path中圓括號內的字符串。
執行規則
默認支持Redirect和Break這兩種規則。
Redirect:如果請求URL匹配了某條規則,該請求將會被302重定向到目標URL,CDN節點返回給客戶端的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變量計算
默認為不勾選,勾選后可以在目標URL中使用Nginx內置變量。配置示例如下:
待重寫的Path:
^/test.jpg$
目標Path:
/test.${arg_type}
開啟Nginx變量計算以后實現的效果是會把${nginx_var}值計算出來,${arg_type}表示原始URL中參數type的值。
說明該參數需提交工單申請后臺配置。
單擊確定,完成配置。
成功配置重寫功能后,您可以在重寫列表中,對當前的配置進行修改或刪除操作。
配置示例
訪問URL重寫規則按照正則表達式配置如下圖所示:
待重寫的Path為正則表達式 ^/hello$
,這是一個用于匹配特定字符串模式的表達式,它的含義如下:
^
: 匹配字符串的開始位置。/hello
: 匹配字符串 "/hello"。$
: 匹配字符串的結束位置。
這個正則表達式會精確匹配字符串 "/hello",其他任何字符串都不會被匹配。例如:
"/hello" 可以被匹配。
"/hello/" 不能被匹配,因為結尾多了一個 "/"。
"hello" 不能被匹配,因為開頭缺少了 "/"。
"/hello world" 不能被匹配,因為在 "/hello" 后面還有其他字符。
客戶端請求http://example.aliyundoc.com/hello
時,請求中包含/hello
,CDN節點會在302狀態碼的Location信息里寫入新的URL地址http://example.aliyundoc.com/index.html
,并返回給客戶端,客戶端對http://example.aliyundoc.com/index.html
發起請求。