重写策略提供修改请求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