更新时间:2025-09-04 GMT+08:00
分享

配置客户端访问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

表1 重定向方式

编码

含义

处理方法

典型应用场景

301

Moved Permanently

GET方法不会发生变更,其他方法有可能会变更为GET方法。

资源被永久转移。

302

Found

GET方法不会发生变更,其他方法有可能会变更为GET方法。

由于不可预见的原因该页面暂不可用。

303

See Other

GET方法不会发生变更,其他方法会变更为GET方法(消息主体会丢失)。

用于PUT或POST请求完成之后进行页面跳转,防止由于页面刷新导致的操作的重复触发。

307

Temporary Redirect

方法和消息主体都不发生变化。

由于不可预见的原因该页面暂不可用。当站点支持非GET方法的链接或操作的时候,该状态码优于302状态码。

工作原理

配置访问URL重写后,如果用户请求命中了配置的规则,那么请求流程如下图所示。

  1. 用户使用旧URL发起请求,假设旧URL为example.com/test/index.html,此时匹配了访问URL重写规则。
  2. 节点返回302状态码(配置访问URL重写时选择的状态码为302),并在HTTP Location头部中放置新的URL地址信息,假设新的URL为example.com/newtest/index.html。
  3. 用户收到302状态码后,使用新的URL(example.com/newtest/index.html)重新发起请求。
  4. 如果匹配节点缓存,则返回对应资源给用户;如果未匹配节点缓存,节点使用重写后的URL(example.com/newtest/index.html)向源站发起请求。
  5. 源站返回请求资源给CDN节点。
  6. CDN节点缓存该资源并返回给用户。

操作步骤

  1. 登录CDN控制台
  2. 在左侧菜单栏中,选择域名管理
  3. 在域名列表中,单击需要修改的域名或域名所在行的“设置”,进入域名配置页面。
  4. 选择“缓存配置”页签。
  5. 在访问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之间的整数,数值越大优先级越高

    优先级设置具有唯一性,不支持多条规则设置同一优先级,且优先级不能输入为空。

  6. 单击“确定”,完成配置。

配置示例

示例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”。

相关文档