重写URL

如果您的源站资源的存放路径发生变化,但希望用户访问的URL路径保持不变,您可以在边缘安全加速 ESA节点上通过重写URL的方式,实现用户请求回源时对URL中的路径和查询字符串(请求参数)进行改写,并使用重写后的URL向源站请求资源。

功能介绍

重写URL不会影响ESA的内部链路和缓存键,仅在ESA节点向源站发起回源请求时采用改写后的URL。

重写URL的应用场景示例如下:

  • 示例一:仅重写路径

    1

  • 示例二:同时重写路径和查询字符串(请求参数)

    2

操作步骤

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

  2. 在左侧导航栏,选择规则 > 转换规则

  3. 选择重写URL页签,单击新增规则,填写规则名称

  4. 如果请求匹配以下规则...区域设置要匹配的用户请求特征,具体配置规则请参见规则表达式的组成

  5. 重写URL区域设置要重写的路径查询字符串

    重写对象

    操作方式

    说明

    路径

    保留

    保留原始请求中的路径,不做修改。

    重写到…

    静态

    使用目标路径(仅支持固定的字符串)替换原始请求中的路径。

    动态

    目标路径支持设置为一个表达式,从而实现动态执行重写操作。

    查询字符串

    保留

    保留原始请求中的查询字符串,不做修改。

    重写到…

    静态

    使用目标查询字符串(仅支持固定的字符串)替换原始请求中的查询字符串。

    动态

    目标查询字符串支持设置为一个表达式,从而实现动态执行重写操作。

  6. 单击确定

配置示例

操作类型为静态的示例

  • 所有匹配上规则条件的用户请求都会将原始URL中的路径替换为新的路径。

    • 重写对象:路径

    • 原始请求URL:https://example.com/examplefile.png

    • 新的路径:/image/example.png

    • 重写后的请求URL:https://example.com/image/example.png

  • 所有匹配上规则条件的用户请求都会将原始URL中的查询字符串替换为新的查询字符串。

    • 重写对象:查询字符串

    • 原始请求URL:https://example.com/examplefile.png?code=123

    • 新的查询字符串:code=321

    • 重写后的请求URL:https://example.com/examplefile.png?code=321

操作类型为动态的示例

  • 所有匹配上规则条件的用户请求都会在URL的路径之前插入一段新的路径/archive

    • 重写对象:路径

    • 原始请求URL:https://example.com/examplefile.png

    • 新的路径表达式:concat("/archive", http.request.uri.path)

    • 重写后的请求URL:https://example.com/archive/examplefile.png

  • 所有匹配上规则条件的用户请求都会在URL的查询字符串之前插入一个新的键值对userid=123

    • 重写对象:查询字符串

    • 原始请求URL:https://example.com/examplefile.png?code=123

    • 新的查询字符串表达式:concat("userid=123&", http.request.uri.query)

    • 重写后的请求URL:https://example.com/examplefile.png?userid=123&code=123

  • 删除所有匹配上规则条件的用户请求URL中的查询字符串的第一个键值对

    • 重写对象:查询字符串

    • 原始请求URL:https://example.com/examplefile.png?key1=value1&key2=value2&key3=value3

    • 新的查询字符串表达式:regex_replace(http.request.uri.query,"^[^&]+&(.*)$","$1")

    • 重写后的请求URL:https://example.com/examplefile.png?key2=value2&key3=value3

  • 删除所有匹配上规则条件的用户请求URL?后面的所有查询字符串

    • 重写对象:查询字符串

    • 原始请求URL:https://example.com/examplefile.png?key1=value1&key2=value2&key3=value3

    • 新的查询字符串表达式:下面这两个表达式都可以删除请求URL中 ? 后面的请求参数。

      • regex_replace(http.request.uri.query,".*","")

      • wildcard_replace(http.request.uri.query,"*","")

    • 重写后的请求URL:https://example.com/examplefile.png?

相关文档

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