如果源站资源的存放路径发生变化,而用户请求的 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 迁移等需要保持语义一致性的场景。 |
操作步骤
新增请求重定向规则后,当用户发起资源访问请求时,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 中的查询字符串。
详细配置示例请参见配置示例。
配置示例
静态重定向示例
场景 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 不包含原始查询参数,符合预期的静态化跳转逻辑。
不同套餐的支持情况
功能项 | 免费版 | 基础版 | 标准版 | 高级版 | 企业版 |
规则条数 | 5条 | 10条 | 50条 | 75条 | 125条 |
相关文档
规则相关的功能,在生效优先级、可重入性、生效颗粒度上存在差异,详细情况请查看规则相关功能的特性说明。