配置客户端访问URL重写
当用户请求URL与CDN节点缓存资源的URL不一致时,可以通过访问URL重写功能重定向或重写到目标URL。
适用场景
如果服务器资源的存放路径变化,CDN节点存放资源的路径也会随之变化。用户请求的URL路径如果没有变化,就需要CDN节点来重写用户请求的URL。例如用户请求的图片“a”的路径为“/test”,服务器中图片“a”的存放路径已改为“/testnew”。
CDN通过重定向的方式来完成URL的匹配,HTTP 302状态码(即302 Found),可表示资源被临时改变了位置。配置访问URL重写后,CDN节点会在给客户端发送的302状态码响应信息的HTTP Location头部中放置新的URL地址信息,客户端收到302状态码响应之后,将会向新的URL地址发起请求。重定向的状态码及其含义详见表表1。
编码 |
含义 |
处理方法 |
典型应用场景 |
---|---|---|---|
301 |
Moved Permanently |
GET方法不会发生变更,其他方法有可能会变更为GET方法。 |
资源被永久转移。 |
302 |
Found |
GET方法不会发生变更,其他方法有可能会变更为GET方法。 |
由于不可预见的原因该页面暂不可用。 |
303 |
See Other |
GET方法不会发生变更,其他方法会变更为GET方法(消息主体会丢失)。 |
用于PUT或POST请求完成之后进行页面跳转,防止由于页面刷新导致的操作的重复触发。 |
307 |
Temporary Redirect |
方法和消息主体都不发生变化。 |
由于不可预见的原因该页面暂不可用。当站点支持非GET方法的链接或操作的时候,该状态码优于302状态码。 |
工作原理
配置访问URL重写后,如果用户请求命中了配置的规则,那么请求流程如下图所示。
- 用户使用旧URL发起请求,假设旧URL为example.com/test/index.html,此时匹配了访问URL重写规则。
- 节点返回302状态码(配置访问URL重写时选择的状态码为302),并在HTTP Location头部中放置新的URL地址信息,假设新的URL为example.com/newtest/index.html。
- 用户收到302状态码后,使用新的URL(example.com/newtest/index.html)重新发起请求。
- 如果匹配节点缓存,则返回对应资源给用户;如果未匹配节点缓存,节点使用重写后的URL(example.com/newtest/index.html)向源站发起请求。
- 源站返回请求资源给CDN节点。
- CDN节点缓存该资源并返回给用户。
操作步骤
- 登录CDN控制台。
- 在左侧菜单栏中,选择 。
- 在域名列表中,单击需要修改的域名或域名所在行的“设置”,进入域名配置页面。
- 选择“缓存配置”页签。
- 在访问URL重写模块,单击“添加”。
图1 添加访问URL重写
表2 参数说明 参数
说明
匹配类型
目录路径:指定目录下的文件需执行访问URL重写规则。
全路径:某个完整路径下的文件需执行访问URL重写规则。
首页:访问域名首页时需执行访问URL重写规则。
匹配内容
目录路径:输入要求以“/”作为首字符,以“,”进行分隔,输入的目录路径总数不能超过20个。支持通配符“*”匹配,最多可配置5个“*”,通配符匹配时仅支持输入一个目录路径。示例:/test/folder01,/test/folder02。
全路径:支持匹配指定目录下的具体文件或者带通配符"*"的文件,不支持配置“?”。输入要求以“/”作为首字符,"*"不能在结尾,最多可配置一个"*"。示例:如/test/index.html或/test/*.jpg。
首页:匹配类型为首页时不填匹配内容,只能配置一条“匹配类型”为“首页”的规则。
目录路径和全路径均不支持正则匹配。
重定向URL
重定向后的URL,以正斜线(/)开头,不含http://头及域名,例:/newtest/index.html。
- 当“匹配类型”为“全路径”时,"*"可以用“$1”捕获,例如:匹配内容为/test/*.jpg,重定向URL配置为/newtest/$1.jpg,则用户请求/test/11.jpg时,$1捕获11,重定向后请求的URL为/newtest/11.jpg。
- 当“匹配类型”为“目录路径”时,"*"可以用“$n”(n=1,2,3...,n≤5且不能超过“*”的总数)捕获,$1捕获第一个“*”、$2捕获第二个“*”,依次按顺序捕获。
- 示例1:匹配内容为/test/*/abc*时,重定向URL配置为/newtest/abc$2,则用户请求/test/test1/abc01/02/1.jpg时,$2捕获第二个“*”对应的内容,即:01/02/1.jpg,重定向后请求的URL为/newtest/abc01/02/1.jpg。
- 示例2:匹配内容为/test/*/abc时,重定向URL配置为/newtest/$1/abc,则用户请求/test/test1/abc/abc02/1.jpg时,$1捕获test1,重定向后请求的URL为/newtest/test1/abc。
执行规则
支持Redirect和Break这两种规则。
- Redirect:如果请求的URL匹配了当前规则,该请求将被重定向到目标Path。执行完当前规则后,当存在其他配置规则时,会继续匹配剩余规则。
- Break:如果请求的URL匹配了当前规则,请求将被改写为目标Path。执行完当前规则后,当存在其他配置规则时,将不再匹配剩余规则,此时不支持配置“重定向Host”和“重定向状态码”,重定向后的请求如果命中CDN缓存,则返回200状态码;如果未命中CDN缓存,回源站请求资源,CDN节点透传源站返回的状态码给客户端。
重定向Host
支持将客户端请求重定向到其他域名,执行规则为Redirect时需要配置此参数。
- 不填时默认为当前域名。
- 支持字符长度为1-255,必须以http://或https://开头,例如http://www.example.com。
- 不支持中文字符。
重定向状态码
执行规则为Redirect时需要配置此参数,支持301、302、303、307,各个重定向方式的区别详见表1。
优先级
访问URL重写规则的优先级,取值为1~1000之间的整数,数值越大优先级越高。
优先级设置具有唯一性,不支持多条规则设置同一优先级,且优先级不能输入为空。
- 单击“确定”,完成配置。
配置示例
示例1:客户端请求“http://www.example.com/test/test1/abc/abc02/1.jpg”时,匹配到了目录规则/test/*/abc,此时客户端访问的URL为“http://www.example.com/newtest/test1/abc”。
示例2:客户端请求“http://www.example.com/test/1.jpg”时,匹配到了全路径规则test/1.jpg,此时客户端访问的URL为“http://www.example.com/newtest/a.html”。