重寫策略提供修改請求URI的能力。您可以通過配置重寫策略來修改經過自定義域名到達您函數的請求URI。本文介紹重寫模式以及如何通過函數計算控制臺為您的自定義域名配置重寫策略。

背景信息

函數計算中,重寫策略只支持修改URI中的pathquery,不支持修改schemehostportfragment

在函數計算中,您可以通過配置自定義域名的重寫策略,實現對函數請求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不匹配

正則重寫

正則重寫模式中,匹配規則和重寫規則遵守標準的正則表達式。關于正則表達式的規范,請參見正則表達式語法。關于正則重寫匹配的示例,如下所示。

說明 正則重寫屬于高階用法,語法較復雜,用于特殊的場景。一般場景下,建議您選擇通配符重寫。
匹配規則替換規則原始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

匹配順序和優先級

三種匹配模式的優先級由高到低依次為:精確重寫→通配符重寫→正則重寫

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

例如,現有通配符重寫策略如下。
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. 登錄函數計算控制臺,在左側導航欄,選擇高級功能 > 域名管理
  2. 在頂部菜單欄,選擇地域,然后在域名管理頁面,單擊添加自定義域名
  3. 添加自定義域名頁面,填寫域名,然后單擊配置項路由配置右側的重寫策略
  4. 配置重寫策略面板,單擊+添加重寫策略,配置相關策略后單擊確定edit-rewriterule

為已有自定義域名配置重寫策略

  1. 登錄函數計算控制臺,在左側導航欄,選擇高級功能 > 域名管理
  2. 域名管理頁面,單擊目標自定義域名右側操作列的編輯
  3. 配置重寫策略面板,單擊+添加重寫策略,配置相關策略后單擊確定edit-rewriterule