全部產品
Search
文件中心

Function Compute:配置重寫策略(公測中)

更新時間:Jul 06, 2024

重寫策略提供修改請求URI的能力。您可以通過配置重寫策略來修改經過自訂網域名到達您函數的請求URI。本文介紹重寫入模式以及如何通過Function Compute控制台為您的自訂網域名配置重寫策略。

背景資訊

Function Compute中,重寫策略只支援修改URI中的pathquery,不支援修改schemehostportfragment

在Function Compute中,您可以通過配置自訂網域名的重寫策略,實現對函數請求URI的重寫。

重寫入模式

自訂網域名支援路由層級的重寫,並且支援精確重寫、萬用字元重寫和正則重寫三種重寫入模式。

精確重寫

精確重寫是指當您請求中的path與匹配規則完全符合時,使用替換規則中的字串替代path。例如,匹配規則為/old,替換規則為/new,對於請求/old,經過重寫後被替換為/new。更多樣本,如下所示。

匹配規則替換規則原始URI重寫後URI
/old/new/old/new
/test/old不匹配
/serviceName.Qualifier/serviceA/serviceName.Qualifier/serviceA

萬用字元重寫

萬用字元重寫提供了一種簡單的匹配方式,可以滿足您大多數需求。

萬用字元重寫使用萬用字元(*)來匹配任一字元串,並且可以在替換規則中根據萬用字元出現的順序對萬用字元匹配的字串進行引用。例如,匹配規則為/api/*,替換規則為/$1,對於請求/api/getFunctionName,經過重寫後被替換為/getFunctionName。更多樣本,如下所示。

說明 在萬用字元重寫入模式中,*^具有特殊含義,其餘字串則作為一般字元串進行匹配處理。
  • *表示匹配任一字元串。
  • ^表示從字串的開始位置進行匹配。
匹配規則替換規則原始URI重寫後URI
/old/new/old/new
/test/old/new
^/old/new/old/new
/test/old不匹配
/api/*/$1/api/getFunctionName/getFunctionName
/api/getFunctionName&Version=1/getFunctionName&Version=1
/css/*/public/static/css/$1/css/style.css/public/static/css/style.css
/ServiceName/*/FunctionName/*/Qualifier/*/$1.$3/$2/ServiceName/svc-a/FunctionName/func-a/Qualifier/1/svc-a.1/func-a
/f..c/helloworld/f..c/helloworld
/func不匹配

正則重寫

正則重寫入模式中,匹配規則和重寫規則遵守標準的Regex。關於Regex的規範,請參見Regex文法。關於正則重寫匹配的樣本,如下所示。

說明 正則重寫屬於高階用法,文法較複雜,用於特殊的情境。一般情境下,建議您選擇萬用字元重寫。
匹配規則替換規則原始URI重寫後URI
^/old/[a-z]+//new/old/ab//new
/test/a-b/不匹配
^/api/.+?/(.*)/api/v2/$1/api/v1/test/api/v2/test
/api/v1-pre/test/api/v2/test

匹配順序和優先順序

三種匹配模式的優先順序由高到低依次為:精確重寫→萬用字元重寫→正則重寫

Function Compute支援在一條路由規則下配置多條重寫策略,因此,一條請求有可能匹配多個重寫策略。當一條請求同時匹配相同重寫入模式的多條重寫策略時,Function Compute會按照您的策略順序依次對請求進行匹配,直到遇到第一個可以成功匹配的策略,則按照該策略進行替換,其餘策略不再繼續匹配。

例如,現有萬用字元重寫策略如下。
var rule1 = &WildcardRules{
    Match:       "/api/v1/*",
    Replacement: "/api/v2/$1",
}

var rule2 = &WildcardRules{
    Match:       "/api/*/*",
    Replacement: "/api/v3/$2",
}
  • 如果使用者的重寫策略為[rule1, rule2],那麼對於請求/api/v1/getFunctionName會被重寫為/api/v2/getFunctionName
  • 如果使用者的重寫策略為[rule2, rule1],那麼對於請求/api/v1/getFunctionName會被重寫為/api/v3/getFunctionName

前提條件

已建立服務和函數。具體操作,請參見建立服務建立函數

操作步驟

您可以在建立自訂網域名的同時配置重寫策略,也可以為已有自訂網域名配置重寫策略。

建立自訂網域名時配置重寫策略

  1. 登入Function Compute控制台,在左側導覽列,選擇進階功能 > 網域名稱管理
  2. 在頂部功能表列,選擇地區,然後在網域名稱管理頁面,單擊添加自訂網域名
  3. 添加自訂網域名頁面,填寫網域名稱,然後單擊配置項路由配置右側的重寫策略
  4. 配置重寫策略面板,單擊+添加重寫策略,配置相關策略後單擊確定edit-rewriterule

為已有自訂網域名配置重寫策略

  1. 登入Function Compute控制台,在左側導覽列,選擇進階功能 > 網域名稱管理
  2. 網域名稱管理頁面,單擊目標自訂網域名右側操作列的編輯
  3. 配置重寫策略面板,單擊+添加重寫策略,配置相關策略後單擊確定edit-rewriterule