侦听器规则的转换
规则转换会在将入站请求路由到目标之前对其进行重写。重写请求不会改变在评估规则条件时做出的路由决定。当客户端发送的 URL 或主机标头与目标预期的标头不同时,这将非常实用。
使用规则转换将修改路径、查询字符串和主机标头的责任转移到给负载均衡器。这样就无需在应用程序代码中添加自定义修改逻辑,也无需依赖第三方代理来执行修改。
应用程序负载均衡器支持侦听器规则的以下转换。
转换
host-header-rewrite-
重写请求中的主机标头。转换使用正则表达式来比对主机标头中的模式,然后将其替换为替换字符串。
url-rewrite-
重写请求 URL。转换使用正则表达式来比对请求 URL 中的模式,然后将其替换为替换字符串。
转换基础知识
-
每条规则可以添加一个主机标头重写转换和一个 URL 重写转换。
-
无法向默认规则添加转换。
-
如果没有模式匹配,则会将原始请求发送到目标。
-
如果存在模式匹配但转换失败,我们将返回 HTTP 500 错误。
主机标头重写转换
您可以修改主机标头中指定的域名。
例 主机标头转换示例
您可以在创建或修改规则时指定转换。有关更多信息,请参阅 create-rule 和 modify-rule 命令。以下是一个主机标头转换示例。此示例会将主机标头转换为一个内部端点。
[ { "Type": "host-header-rewrite", "HostHeaderRewriteConfig": { "Rewrites": [ { "Regex": "^mywebsite-(.+).com$", "Replace": "internal.dev.$1.myweb.com" } ] } } ]
例如,此转换会将主机标头 https://mywebsite-example.com/project-a 重写为 https://internal.dev.example.myweb.com/project-a。
URL 重写转换
您可以修改 URL 的路径或查询字符串。通过在负载均衡器级别重写 URL,即使后端服务发生变化,前端 URL 也可以在用户和搜索引擎中保持一致。此外还可以简化复杂的 URL 查询字符串,更遍布客户键入。
请注意,不能修改 URL 的协议或端口,只能修改路径和查询字符串。
例 URL 重写转换示例
您可以在创建或修改规则时指定转换。有关更多信息,请参阅 create-rule 和 modify-rule 命令。以下是一个 URL 重写转换示例。此示例会将目录结构转换为查询字符串。
[ { "Type": "url-rewrite", "UrlRewriteConfig": { "Rewrites": [ { "Regex": "^/dp/([A-Za-z0-9]+)/?$", "Replace": "/product.php?id=$1" } ] } } ]
例如,此转换会将请求 URL https://www.example.com/dp/B09G3HRMW 重写为 https://www.example.com/product.php?id=B09G3HRMW。
URL 重写与 URL 重定向的区别
| 特征 | URL 重定向 | URL 重写 |
|---|---|---|
| URL 显示 | 浏览器地址栏中有变化 | 浏览器地址栏中无变化 |
| 状态代码 | 使用 301(永久)或 302(临时) | 状态代码无变化 |
| 处理 | 浏览器端 | 服务器端 |
| 常见用途 | 域名变更、网站整合、修复损坏的链接 | 出于 SEO 目的清理 URL,隐藏复杂的结构,提供旧版 URL 映射 |