阿里云DCDN支持在用户请求需要回源时进行URI改写,改写不影响DCDN的内部链路和缓存key,只会在DCDN节点向源站发送回源请求的时候使用改写后的URL。通过本文您可以了解改写回源URL功能的操作步骤。
适用场景
源站的资源路径发生了变更,客户源站的资源存放路径发生了变更,但是用户请求URL里面包含的资源路径没有变更,这时就需要DCDN节点来改写回源请求里面的资源路径。
例如:图片文件原先存放在目录“/download/”,现在变更为“/image/”。
工作原理
通过改写回源URI规则,使请求URI与源站URI匹配,准确获取源站的资源,或者传递指定的参数给源站。
执行规则设置为“空”或者“break”的情况下,仅改写URI中的资源路径部分。
执行规则设置为“enhance_break”的情况下,能够同时改写资源路径和请求参数。
注意事项
单个域名可以配置的回源URI改写规则数量上限是50个。
规则改写按照规则列表从上到下顺序执行的,此顺序可能会影响您的改写结果。
回源URI改写功能与重写功能的区别在于,重写功能的作用位置是在DCDN边缘节点上面,会影响DCDN内部链路,也会改写缓存key,而回源URI改写功能的作用位置是在DCDN回源节点上面,不影响DCDN内部链路,不改写缓存key。
回源URI改写功能在配置执行规则的情况下,对URL中参数的改写可能会与过滤参数功能相冲突,同时配置的时候,需要注意避免配置冲突。
页签下的
配置回源URI
- 登录DCDN控制台。
- 在左侧导航栏,单击域名管理。
- 在域名管理页面,单击目标域名对应的配置。
- 在指定域名的左侧导航栏,单击回源配置。
单击回源URI改写页签。
在回源URI改写页签,单击添加。
根据您的需求,配置需要改写的URI、目标URI和执行规则。
参数
示例
说明
需要改写的URI
^/hello$
以正斜线(/)开头的URI,不含http://头及域名。必须使用PCRE正则表达式。
目标URI
/hello/test
以正斜线(/)开头的URI,不含http://头及域名。支持使用PCRE正则表达式。
执行规则
空
如果配置了多条规则,在匹配执行当前规则后,按照从上到下顺序按依次执行可以匹配的所有规则。
break
如果配置了多条规则,若请求的URI匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。
只修改URI中的资源路径部分,不修改URL的参数,不影响改写回源参数功能对URL中参数的改写。
enhance_break
如果配置了多条规则,若请求的URI匹配了当前规则,匹配执行完当前规则后,剩余规则将不再匹配。
与break相似,但是增加了对URL中参数部分的改写能力,对URL中参数的改写可能会与改写回源参数功能对URL中参数的改写相冲突,这两个功能同时配置的时候,需要注意避免配置冲突。
单击确定,使改写规则开始执行和生效。
您也可以在回源URI改写页面的规则列表中,单击修改或删除,对当前配置的规则进行相应操作。
配置示例
样例一:执行空规则。
待改写URI
^/hello$
目标URI
/index.html
执行规则
空
结果说明
原始请求:
http://aliyundoc.com/hello
改写后的回源请求:
http://aliyundoc.com/index.html
该请求将会继续匹配回源URI改写规则列表中其余的规则。
样例二:执行break规则。
待改写URI
^/hello.jpg$
目标URI
/image/hello.jpg
执行规则
break
结果说明
原始请求:
http://example.com/hello.jpg
改写后的回源请求:
http://example.com/image/hello.jpg
该请求将不再继续匹配回源URI改写规则列表中其余的规则。
样例三:执行enhance break规则。
待改写URI
^/hello.jpg?code=123$
目标URI
/image/hello.jpg?code=321
执行规则
enhance break
结果说明
原始请求:
http://example.com/hello.jpg?code=123
改写后的回源请求:
http://example.com/image/hello.jpg?code=321
该请求将不再继续匹配回源URI改写规则列表中其余的规则。
样例四:在文件名是变量的情况下对根目录添加URI前缀。
例如:将包含/xxx的URI(xxx代表任意文件名称,例如:/hello.jpg、/hello.html等等)改写为/image/xxx,即对根目录下的任意文件的URI都插入路径/image。
待改写URI
^(.*)$
说明^(.*)$代表任意字符,()代表的是一个分组,可以在目标URI中通过$1来调用分组的变量内容。
目标URI
/image$1
说明$1表示正则表达式中第一对圆括号中的表达式匹配到的内容,$2是第二个小括号里面的内容,依此类推。
执行规则
break
结果说明
原始请求:
http://example.com/hello.jpg
改写后的回源请求:
http://example.com/image/hello.jpg
原始请求:
http://example.com/hello.html
改写后的回源请求:
http://example.com/image/hello.html
该请求将不再继续匹配回源URI改写规则列表中其余的规则。
样例五:在文件名是变量的情况下对指定目录添加URI前缀。
例如:将包含/live/xxx的URI(xxx代表任意文件名称,例如:/live/hello.jpg、/live/hello.html 等等)改写为/image/live/xxx,即对目录/live下的任意文件的URI都插入路径/image。
待改写URI
^/live/(.*)$
目标URI
/image/live/$1
执行规则
break
结果说明
原始请求:
http://example.com/live/hello.jpg
改写后的回源请求:
http://example.com/image/live/hello.jpg
原始请求:
http://example.com/live/hello.html
改写后的回源请求:
http://example.com/image/live/hello.html
该请求将不再继续匹配回源URI改写规则列表中其余的规则。
样例六:匹配多条规则时,执行空规则。
配置两条规则如下图所示:
结果说明:
原始请求:
http://example.com/image_01.png
改写后的回源请求:
http://example.com/image/image_02.png
说明先匹配第一条规则,改写为
http://example.com/image_02.png
,继续匹配第二条规则,最终改写为http://example.com/image/image_02.png
。样例七:匹配多条规则时,执行break规则。
配置两条规则如下图所示:
结果说明:
原始请求:
http://example.com/image_01.png
改写后的回源请求:
http://example.com/image_02.png
说明先匹配第一条规则,改写为
http://example.com/image_02.png
,由于第一条规则为设置为break,所以不再匹配后续规则。