當來源站點的資源路徑發生變更,但希望保持面向使用者的URL不變時,可通過邊緣安全加速 ESA節點配置URL重寫規則,在請求回源階段自動修改URL中的路徑和查詢字串(請求參數),並將改寫後的URL發送至來源站點擷取資源。該方式無需調整前端連結或來源站點配置,即可實現平滑遷移與無縫對接,保障商務持續性。
典型應用情境
來源站點遷移:來源站點檔案路徑調整,但希望保持使用者訪問路徑不變。
API版本適配:將使用者請求的舊版本API路徑重寫為新版本。
參數標準化:統一不同用戶端傳遞的參數格式。
路徑美化:將複雜的後端路徑映射為簡潔的使用者訪問路徑。
工作原理
如果設定了重寫URL功能,那麼在提交預熱緩衝任務的時候,待預熱URL需要使用重寫後的URL。
URL重寫僅作用於回源環節,不會影響ESA內部的請求處理鏈路。緩衝鍵仍基於原始URL產生,確保緩衝匹配的一致性;重寫後的URL僅用於向來源站點發起回源請求,實現對外路徑不變、對內靈活適配的目的。
執行流程
判斷是否命中緩衝:使用者請求到達ESA邊緣節點,ESA根據使用者請求的原始URL尋找緩衝,如果緩衝未命中,ESA執行URL重寫規則,將原始URL修改為目標URL。
未命中緩衝時使用改寫後的URL回源:ESA使用重寫後的URL向來源站點請求資源,來源站點響應並將請求內容緩衝至ESA,ESA根據原始URL作為緩衝鍵進行緩衝。
返回緩衝內容至用戶端:ESA將緩衝內容返回至用戶端。
執行順序
重寫URL在快取命中判斷之後、實際回源請求發起之前執行。其執行順序晚於來源站點選擇規則,但早於回源要求標頭修改規則,確保在確定來源站點目標後對請求路徑進行靈活調整,同時不影響後續頭部處理邏輯。
配置重寫URL規則
在ESA控制台,選擇網站管理,在網站列單擊目標網站。
在左側導覽列,選擇。
選擇重寫URL頁簽,單擊新增規則,填寫規則名稱。
在如果請求匹配以下規則...地區設定要匹配的使用者請求特徵,具體配置規則請參見規則運算式的組成。
在重寫URL地區設定需要重寫的路徑和查詢字串,然後單擊確定。
重寫對象
操作方式
說明
樣本
路徑
保留
不修改原始路徑。
-
重寫到…
靜態
替換為固定路徑(必須以
/開頭)。/new/path動態
使用運算式動態產生路徑。
concat("/v2", http.request.uri.path)查詢字串
保留
不修改原始查詢參數。
-
重寫到…
靜態
替換為固定參數(不含
?)。version=new&type=api動態
使用運算式動態產生參數。
concat("version=new&", http.request.uri.query)
配置樣本
樣本一:來源站點路徑遷移
情境:來源站點將圖片從
/images/目錄遷移至/static/img/目錄。匹配條件:
starts_with(http.request.uri.path, "/images/")重寫配置:
重寫對象:路徑
操作方式:動態
運算式:
regex_replace(http.request.uri.path, "^/images/", "/static/img/")
重寫效果:
使用者請求:
https://example.com/images/logo.png回源請求:
https://origin.com/static/img/logo.png
樣本二:API版本適配
情境:將所有對舊版API
/api/v1/的請求,在回源時自動指向新版/api/v2/,並附加一個版本標識參數。匹配條件:
starts_with(http.request.uri.path, "/api/v1/")重寫配置:
重寫對象:路徑、查詢字串
操作方式:動態
路徑重寫運算式:
regex_replace(http.request.uri.path, "^/api/v1/", "/api/v2/")查詢字串重寫運算式:
concat("api_version=v2&", http.request.uri.query)
重寫效果:
使用者請求:
https://example.com/api/v1/users?limit=10回源請求:
https://origin.com/api/v2/users?api_version=v2&limit=10
樣本三:參數標準化
情境:不同用戶端使用不同的參數名(如
userid和uid),統一重寫為標準的user_id。匹配條件:
http.request.uri.query contains "userid="重寫配置:
重寫對象:查詢字串
操作方式:動態
運算式:
regex_replace(http.request.uri.query, "userid=", "user_id=")
重寫效果:
使用者請求:
https://example.com/profile?userid=123回源請求:
https://origin.com/profile?user_id=123
樣本四:路徑正常化
情境:統一處理URL中因輸入錯誤產生的字元。以
刪除URL中的連續斜杠(如 // 或 ///)為例。匹配條件:
http.request.uri.path contains "//"重寫配置:
重寫對象:路徑
操作方式:動態
運算式:
regex_replace(http.request.uri.path, "/+", "/")
重寫效果:
使用者請求:
https://example.com/path//to///resource回源請求:
https://origin.com/path/to/resource
樣本五:刪除所有查詢參數
情境:對於某些靜態資源,為提高來源站點處理效率,需移除所有查詢參數。以
刪除以.css結尾的URI路徑後的所有字元為例。匹配條件:
ends_with(http.request.uri.path, ".css")重寫配置:
重寫對象:查詢字串
操作方式:靜態,內容設定為空白
重寫效果:
使用者請求:https://example.com/style.css?version=1.2.3
回源請求:
https://origin.com/style.css
樣本六:簡化動態路徑
情境:縮短包含冗餘數字或代碼的長路徑。以
刪除/example/路徑中所有為例。123及其後跟隨的數字序列,保留其餘內容匹配條件:
(http.request.uri matches "^/example/(.*)123[0-9]+(.*)$")重寫配置:
重寫對象:路徑
操作方式:動態
運算式:
regex_replace(http.request.uri,"^/example/(.*)123[0-9]+(.*)$","/example/$1$2")

重寫效果:
使用者請求:
https://example.com/example/tool12300341features回源請求:
https://example.com/example/toolfeatures
樣本七:提取路徑參數並添加到查詢字串
情境:需要提取URL路徑中的動態參數作為某個新增的查詢參數的值,同時將URL路徑中的動態參數重寫為一段固定的字串:
原始URI:
/api/v1/動態值/download?version=1&size=2重寫後的URI:
/api/v1/fixed/download?version=1&size=2&token=動態值
匹配條件:所有傳入請求
重寫配置:
重寫對象:路徑 + 查詢字串
操作方式:動態
路徑重寫運算式:
regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$", "/api/v1/test/download")查詢字串重寫運算式:
concat(http.request.uri.query,"&token=",regex_replace(http.request.uri.path, "^/api/v1/(.*)/download$","$1"))

重寫效果:
使用者請求:
https://example.com/api/v1/ABC123/download?version=1&size=2回源請求:
https://example.com/api/v1/fixed/download?version=1&size=2&token=ABC123
相關參考
參考文檔
規則相關的功能,在生效優先順序、可重新進入性、生效顆粒度上存在差異,詳細情況請查看規則相關功能的特性說明。
運算式參考
此處變數和函數資訊僅為參考,更多運算式詳情,請參見規則運算式的組成。
常用變數
變數 | 描述 | 樣本 |
| 請求路徑 |
|
| 查詢字串(不含 |
|
| 完整URI(路徑+查詢) |
|
常用函數
函數 | 描述 | 樣本 |
| 拼接多個字串 |
|
| 使用Regex進行尋找和替換 |
|
| 判斷字串是否以指定首碼開始 |
|
| 判斷字串是否以指定尾碼結束 |
|