如果源站资源的存放路径发生变化,而用户请求的 URL 保持不变,您可以在边缘安全加速 ESA节点上配置请求重定向规则,将用户请求的 URL 重定向至目标 URL,从而减少回源请求,提高客户端访问性能。
功能介绍
请求重定向的工作流程如下:
用户在客户端发起资源访问请求。
ESA节点匹配重定向规则后,向客户端返回重定向状态码(如 301 或 302),并在 HTTP 响应头中携带目标 URL。
客户端收到响应后,根据响应头中的 Location 字段向新的 URL 发起请求,完成资源访问。
支持的重定向状态码及应用场景
状态码 | 含义 | 处理方法 | 典型应用场景 |
301 | 永久重定向(Moved Permanently) | GET 方法不变,其他方法可能变更为 GET。 | 请求资源已永久移动到 Location 头部指定的新 URL,搜索引擎会更新链接。 |
302 | 临时重定向(Found) | GET 方法不变,其他方法可能变更为 GET。 | 页面暂时不可用,搜索引擎不会更新链接。 |
303 | 临时重定向(See Other) | GET 方法不变,其他方法会强制变更为 GET(消息主体丢失)。 | 用于 PUT 或 POST 请求完成后的页面跳转,避免页面刷新导致重复操作。 |
307 | 临时重定向(Temporary Redirect) | 方法和消息主体都不变。 | 页面暂时不可用,当站点支持非 GET 方法的链接或操作时,该状态码优于 302。 |
308 | 永久重定向(Permanent Redirect) | 方法和消息主体都不变。 | 永久迁移资源,强制客户端保留原始请求方法和请求体,适用于网站重构或 API 迁移等需要保持语义一致性的场景。 |
关于非 GET 请求的注意事项
若需对 API 接口或 POST、PUT 等非 GET 请求进行重定向,且需保留原始请求方法和请求体(Body),请选择 307(临时重定向)或 308(永久重定向)状态码。使用 301 或 302 时,部分客户端会将非 GET 请求自动转换为 GET 请求,可能导致请求体数据丢失。
建议避免对上传类大流量路径(如
/api/upload)配置重定向,否则可能因重定向导致回源流量异常。如需处理此类路径,建议将上传接口拆分至独立域名,或通过 WAF 规则进行拦截。
操作步骤
新增请求重定向规则后,当用户发起资源访问请求时,ESA将按照规则的生效优先级依次匹配并执行,返回相应结果。
在ESA控制台选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。单击新增规则。
在新增重定向规则页面,填写以下配置项后单击确定:
规则名称:自定义规则名,如
my-rule传入请求类型:设置要匹配的用户请求特征,如
主机名 等于 www.example.com也可以直接编辑表达式,如 (http.host eq "www.example.com")
单一重定向:
参数
类型
说明
类型
静态
适用于需要重定向到固定 URL,例如:URL填写
https://test.example.com/image/1.jpg?test=123。动态
适用于需要动态修改URL,可设置为一个表达式,例如需要
将用户请求 URL 中的主机名替换为新域名,路径保持不变可配置:表达式为concat("https://www.example.com", http.request.uri.path)。状态码
配置重定向的响应状态码:301(默认)、302、303、307 和 308。详细说明请参见支持的重定向状态码及应用场景。
保留查询字符串
是否携带原查询参数至目标 URL,默认关闭,即重定向后不携带原请求的查询参数。
开启保留查询字符串后:
用户请求 URL 携带查询字符串时,覆盖重定向 URL 中的查询字符串。
用户请求 URL 未携带查询字符串时,使用重定向 URL 中的查询字符串。
详细配置示例请参见配置示例。
动态重定向目标 URL 常用表达式
场景 | 表达式示例 |
保留原始路径跳转(如非 www 跳 www、HTTP 跳 HTTPS) |
|
去除或替换路径前缀(如将 |
|
使用动态重定向时,须在重定向类型中选择动态,并在目标 URL 输入框中填写合法的表达式语法。若直接填写含变量名称的普通字符串(非合法表达式),系统将无法解析,导致保存失败。
配置示例
静态重定向示例
场景 1:请求无查询字符串,重定向 URL 有查询字符串
请求是否携带查询字符串:否
重定向 URL 是否携带查询字符串:是
保留查询字符串配置:开启或关闭
用户请求 URL 示例:
http://test.example.com/1.jpg配置的重定向 URL 示例:
http://test.example.com/image/1.jpg?test=123实际重定向 Location 示例:
http://test.example.com/image/1.jpg?test=123说明:原始请求无查询参数时,无论保留查询字符串配置是否开启,最终 Location 均保留配置 URL 的查询字符串。
场景 2:请求和重定向 URL 均有查询字符串,保留查询字符串开启
请求是否携带查询字符串:是
重定向 URL 是否携带查询字符串:是
保留查询字符串配置:开启
用户请求 URL 示例:
http://test.example.com/1.jpg?test=321配置的重定向 URL 示例:
http://test.example.com/image/1.jpg?test=123实际重定向 Location 示例:
http://test.example.com/image/1.jpg?test=321说明:保留查询字符串开启时,仅保留原始请求的查询字符串,忽略配置 URL 的查询参数。
场景 3:请求和重定向 URL 均有查询字符串,保留查询字符串关闭
请求是否携带查询字符串:是
重定向 URL 是否携带查询字符串:是
保留查询字符串配置:关闭
用户请求 URL 示例:
http://test.example.com/1.jpg?test=321配置的重定向 URL 示例:
http://test.example.com/image/1.jpg?test=123实际重定向 Location 示例:
http://test.example.com/image/1.jpg?test=123说明:保留查询字符串关闭时,仅保留配置 URL 的查询字符串,忽略原始请求的查询参数。
场景 4:请求有查询字符串,重定向 URL 无查询字符串,保留查询字符串开启
请求是否携带查询字符串:是
重定向 URL 是否携带查询字符串:否
保留查询字符串配置:开启
用户请求 URL 示例:
http://test.example.com/1.jpg?test=321配置的重定向 URL 示例:
http://test.example.com/image/1.jpg实际重定向 Location 示例:
http://test.example.com/image/1.jpg?test=321说明:保留查询字符串开启时,自动将原始请求的查询字符串附加到配置 URL(即使配置 URL 无查询参数)。
场景 5:请求有查询字符串,重定向 URL 无查询字符串,保留查询字符串关闭
请求是否携带查询字符串:是
重定向 URL 是否携带查询字符串:否
保留查询字符串配置:关闭
用户请求 URL 示例:
http://test.example.com/1.jpg?test=321配置的重定向 URL 示例:
http://test.example.com/image/1.jpg实际重定向 Location 示例:
http://test.example.com/image/1.jpg说明:保留查询字符串关闭时,直接丢弃原始请求的查询字符串,仅返回配置 URL。
动态重定向示例
场景 1:保留查询字符串关闭
保留查询字符串配置:关闭
用户请求 URL 示例:
https://test.example.com/image/1.jpg?test=123函数表达式:
concat("https://www.example.com", http.request.uri.path)实际重定向 Location 示例:
https://www.example.com/image/1.jpg说明:
配置关闭时,仅保留路径部分(
/image/1.jpg),忽略原始请求的查询字符串(?test=123)。函数表达式仅拼接域名和路径,不处理查询参数。
场景 2:保留查询字符串开启
保留查询字符串配置:开启
用户请求 URL 示例:
https://test.example.com/image/1.jpg?test=123函数表达式:
concat("https://www.example.com", http.request.uri.path)实际重定向 Location 示例:
https://www.example.com/image/1.jpg?test=123说明:
配置开启时,自动将原始请求的查询字符串附加到生成的 URL(即使函数表达式未显式处理查询参数)。
函数表达式仅处理路径拼接,查询字符串由系统根据配置自动追加。
场景 3:wildcard_replace 函数示例(保留查询字符串开启)
保留查询字符串配置:开启
用户请求 URL 示例:
https://www.example.com/image-flower-20250816-1.html?src=cdn函数表达式:
wildcard_replace(http.request.full_uri, "https://www.example.com/image-*", "https://www.example.com/${1}")实际重定向 Location 示例:
https://www.example.com/flower-20250816-1.html?src=cdn说明:
配置开启时,系统会自动将原始请求中的查询字符串(如
?src=cdn)附加到函数表达式生成的目标 URL 末尾。函数表达式本身只需关注路径的重写与拼接,无需显式处理查询参数,查询字符串由系统根据配置自动透传。
场景 4:wildcard_replace 函数示例(保留查询字符串关闭)
保留查询字符串配置:关闭
用户请求 URL 示例:
https://www.example.com/index.html?place=garden&date=20250816函数表达式:
wildcard_replace(http.request.full_uri, "https://www.example.com/index.html?place=garden&date=*", "https://www.example.com/flower-${1}-1.html")实际重定向 Location 示例:
https://www.example.com/flower-20250816-1.html说明:
配置关闭时,系统不会自动保留原始请求的查询字符串。目标 URL 完全由函数表达式生成,原始参数(如
place=garden)仅用于匹配规则,其中*匹配date后的值并作为${1}参与重写。最终跳转 URL 不包含原始查询参数,符合预期的静态化跳转逻辑。
常见问题
如何实现根域名(裸域名)与 www 域名之间的相互跳转?
根据接入场景不同,选择以下方案:
场景 1:根域名和 www 域名均已通过 CNAME 或 NS 接入 ESA
在 ESA 中配置对应主机名的重定向规则,实现根域名与 www 域名的相互跳转。即使已配置重定向,被重定向的源域名也需保留 CNAME 记录,以确保 ESA 能识别该域名的流量。
场景 2:根域名存在 MX 记录,无法配置 CNAME(DNS 冲突)
建议使用 DNS 服务商提供的 URL 转发功能。该方式仅支持 HTTP 协议,流量不经过 ESA,无法享受 ESA 的安全防护和加速能力。
若此前已在 DNS 配置了 URL 转发记录,改用 ESA 重定向前需先删除该记录并添加 ESA CNAME,否则 ESA 规则不会生效。
配置重定向规则后未生效或跳转错误怎么办?
请按以下步骤逐一排查:
检查匹配条件覆盖范围:确认规则匹配条件是否覆盖了用户实际访问的域名。例如:若仅配置了 www 域名规则,用户访问裸域名时规则不生效,需补充裸域名规则或使用通配符匹配。
确认域名已通过 CNAME 或 NS 接入 ESA:ESA 重定向要求域名流量经过 ESA 节点。若域名仅在源站配置了跳转,或依赖 DNS URL 转发,流量不经过 ESA,规则将不生效。
检查规则优先级:确认是否存在更高优先级的规则覆盖了当前重定向规则。请参见规则的生效优先级了解规则匹配顺序。
验证动态表达式语法:若使用动态重定向,请确认表达式语法正确,拼接目标 URL 须使用
concat函数,不能直接填写含变量的普通字符串。
配置重定向后出现死循环或网站无法访问怎么办?
请按以下步骤排查并修复:
检查是否存在循环配置:若 www 域名的回源地址指向根域名,同时又配置了根域名到 www 的重定向规则,将形成无限循环。请将源站地址还原为真实 IP 或原始源站域名。
HTTP 跳 HTTPS 建议使用专用功能:ESA 控制台提供强制 HTTPS配置项,优先使用该功能代替手动配置重定向规则,可有效避免规则冲突引发的循环跳转。
刷新缓存:若浏览器或 CDN 缓存了旧的重定向响应导致问题持续,请在 ESA 控制台刷新相关缓存后重新验证。
检查规则匹配范围:确认重定向规则的匹配条件未意外覆盖健康检查路径或其他特殊路径,避免误匹配导致服务不可用。
如何根据设备类型(如手机端)或请求特征配置条件重定向?
在重定向规则的传入请求类型匹配条件中,可基于请求头(如 User-Agent)设置判断:
匹配方式选择"包含":User-Agent 通常为较长字符串,建议使用"包含"而非"等于"进行匹配,以兼容不同设备和浏览器的 User-Agent 格式。
手机端跳转配置示例:
匹配条件:
User-Agent 包含 Mobile,或User-Agent 包含 Android/iPhone执行动作:设置为 302 临时重定向至移动端专属域名(如
https://m.example.com)
多条件组合:可结合路径、查询参数等多个匹配条件实现精细化跳转控制,例如仅对特定页面的手机端流量执行重定向。
为什么配置了重定向规则但浏览器地址栏 URL 没有变化?
这通常是将 URL 重写与请求重定向混淆所致,两者区别如下:
请求重定向:ESA 向客户端返回 3xx 状态码,浏览器自动跳转至目标 URL,地址栏中的 URL 将发生改变。
URL 重写:ESA 仅修改回源请求路径(透明代理),浏览器地址栏 URL 保持不变。
若需保持地址栏 URL 不变仅修改回源路径,请使用 URL 重写功能;若需浏览器跳转并改变地址栏 URL,请使用请求重定向功能。
若站点的加速区域不包含中国内地,中国内地用户访问时可能无法享受 ESA 加速效果,请根据业务需求合理配置加速区域。
不同套餐的支持情况
功能项 | Entrance | Pro | Premium | Enterprise |
规则条数 | 10条 | 25条 | 50条 | 125条 |
相关文档
规则相关的功能,在生效优先级、可重入性、生效颗粒度上存在差异,详细情况请查看规则相关功能的特性说明。