如果您的源站资源的存放路径发生变化,但希望用户访问的URL路径保持不变,您可以在边缘安全加速 ESA节点上通过重写URL的方式,实现用户请求回源时对URL中的路径和查询字符串(请求参数)进行改写,并使用重写后的URL向源站请求资源。
功能介绍
重写URL不会影响ESA的内部链路和缓存键,仅在ESA节点向源站发起回源请求时采用改写后的URL。
重写URL的应用场景示例如下:
示例一:仅重写路径
示例二:同时重写路径和查询字符串(请求参数)
操作步骤
在ESA控制台,选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择 。
选择重写URL页签,单击新增规则,填写规则名称。
在如果请求匹配以下规则...区域设置要匹配的用户请求特征,具体配置规则请参见规则表达式的组成。
在重写URL区域设置要重写的路径和查询字符串。
重写对象
操作方式
说明
路径
保留
保留原始请求中的路径,不做修改。
重写到…
静态
使用目标路径(仅支持固定的字符串)替换原始请求中的路径。
动态
目标路径支持设置为一个表达式,从而实现动态执行重写操作。
查询字符串
保留
保留原始请求中的查询字符串,不做修改。
重写到…
静态
使用目标查询字符串(仅支持固定的字符串)替换原始请求中的查询字符串。
动态
目标查询字符串支持设置为一个表达式,从而实现动态执行重写操作。
单击确定。
配置示例
操作类型为静态的示例
所有匹配上规则条件的用户请求都会将原始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?
相关文档
规则相关的功能,在生效优先级、可重入性、生效颗粒度这三个特性上存在差异,详细情况请查看规则相关功能的特性说明。