全部產品
Search
文件中心

Edge Security Acceleration:重寫URL

更新時間:Jan 09, 2026

當來源站點的資源路徑發生變更,但希望保持面向使用者的URL不變時,可通過邊緣安全加速 ESA節點配置URL重寫規則,在請求回源階段自動修改URL中的路徑和查詢字串(請求參數),並將改寫後的URL發送至來源站點擷取資源。該方式無需調整前端連結或來源站點配置,即可實現平滑遷移與無縫對接,保障商務持續性。

典型應用情境

  • 來源站點遷移:來源站點檔案路徑調整,但希望保持使用者訪問路徑不變。

  • API版本適配:將使用者請求的舊版本API路徑重寫為新版本。

  • 參數標準化:統一不同用戶端傳遞的參數格式。

  • 路徑美化:將複雜的後端路徑映射為簡潔的使用者訪問路徑。

工作原理

說明

如果設定了重寫URL功能,那麼在提交預熱緩衝任務的時候,待預熱URL需要使用重寫後的URL。

URL重寫僅作用於回源環節,不會影響ESA內部的請求處理鏈路。緩衝鍵仍基於原始URL產生,確保緩衝匹配的一致性;重寫後的URL僅用於向來源站點發起回源請求,實現對外路徑不變、對內靈活適配的目的。

執行流程

  1. 判斷是否命中緩衝:使用者請求到達ESA邊緣節點,ESA根據使用者請求的原始URL尋找緩衝,如果緩衝未命中,ESA執行URL重寫規則,將原始URL修改為目標URL。

  2. 未命中緩衝時使用改寫後的URL回源:ESA使用重寫後的URL向來源站點請求資源,來源站點響應並將請求內容緩衝至ESAESA根據原始URL作為緩衝鍵進行緩衝。

  3. 返回緩衝內容至用戶端:ESA將緩衝內容返回至用戶端。

執行順序

重寫URL在快取命中判斷之後、實際回源請求發起之前執行。其執行順序晚於來源站點選擇規則,但早於回源要求標頭修改規則,確保在確定來源站點目標後對請求路徑進行靈活調整,同時不影響後續頭部處理邏輯。

配置重寫URL規則

  1. 在ESA控制台,選擇網站管理,在網站列單擊目標網站。

  2. 在左側導覽列,選擇規則 > 轉換規則

  3. 選擇重寫URL頁簽,單擊新增規則,填寫規則名稱

  4. 如果請求匹配以下規則...地區設定要匹配的使用者請求特徵,具體配置規則請參見規則運算式的組成

  5. 重寫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

樣本三:參數標準化

  • 情境:不同用戶端使用不同的參數名(如useriduid),統一重寫為標準的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")

    image

  • 重寫效果

    • 使用者請求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"))

    image

  • 重寫效果

    • 使用者請求https://example.com/api/v1/ABC123/download?version=1&size=2

    • 回源請求https://example.com/api/v1/fixed/download?version=1&size=2&token=ABC123

相關參考

參考文檔

規則相關的功能,在生效優先順序、可重新進入性、生效顆粒度上存在差異,詳細情況請查看規則相關功能的特性說明

運算式參考

說明

此處變數和函數資訊僅為參考,更多運算式詳情,請參見規則運算式的組成

常用變數

變數

描述

樣本

http.request.uri.path

請求路徑

/api/user

http.request.uri.query

查詢字串(不含?

id=123&type=user

http.request.uri

完整URI(路徑+查詢)

/api/user?id=123

常用函數

函數

描述

樣本

concat(str1, str2, ...)

拼接多個字串

concat("/v2", http.request.uri.path)

regex_replace(text, pattern, replacement)

使用Regex進行尋找和替換

regex_replace(http.request.uri.query, "userid=", "user_id=")

starts_with(text, prefix)

判斷字串是否以指定首碼開始

starts_with(http.request.uri.path, "/images/")

ends_with(text, suffix)

判斷字串是否以指定尾碼結束

ends_with(http.request.uri.path, ".html")