重寫策略提供修改請求URI的能力。您可以通過配置重寫策略來修改經過自定義域名到達您函數的請求URI。本文介紹重寫模式以及如何通過函數計算控制臺為您的自定義域名配置重寫策略。
背景信息
函數計算中,重寫策略只支持修改URI中的path
和query
,不支持修改scheme
、host
、port
和fragment
。
在函數計算中,您可以通過配置自定義域名的重寫策略,實現對函數請求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
。
前提條件
操作步驟
您可以在創建自定義域名的同時配置重寫策略,也可以為已有自定義域名配置重寫策略。
創建自定義域名時配置重寫策略
- 登錄函數計算控制臺,在左側導航欄,選擇 。
- 在頂部菜單欄,選擇地域,然后在域名管理頁面,單擊添加自定義域名。
- 在添加自定義域名頁面,填寫域名,然后單擊配置項路由配置右側的重寫策略。
- 在配置重寫策略面板,單擊+添加重寫策略,配置相關策略后單擊確定。
為已有自定義域名配置重寫策略
- 登錄函數計算控制臺,在左側導航欄,選擇 。
- 在域名管理頁面,單擊目標自定義域名右側操作列的編輯。
- 在配置重寫策略面板,單擊+添加重寫策略,配置相關策略后單擊確定。