请求重定向

更新时间:
复制为 MD 格式

如果源站资源的存放路径发生变化,而用户请求的 URL 保持不变,您可以在边缘安全加速 ESA节点上配置请求重定向规则,将用户请求的 URL 重定向至目标 URL,从而减少回源请求,提高客户端访问性能。

功能介绍

image

请求重定向的工作流程如下:

  1. 用户在客户端发起资源访问请求。

  2. ESA节点匹配重定向规则后,向客户端返回重定向状态码(如 301 或 302),并在 HTTP 响应头中携带目标 URL。

  3. 客户端收到响应后,根据响应头中的 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将按照规则的生效优先级依次匹配并执行,返回相应结果。

  1. ESA控制台选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择规则 > 重定向规则单击新增规则

  3. 新增重定向规则页面,填写以下配置项后单击确定

    • 规则名称:自定义规则名,如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

相关文档

规则相关的功能,在生效优先级、可重入性、生效颗粒度上存在差异,详细情况请查看规则相关功能的特性说明