本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
根据监听器规则进行变换
规则转换会在入站请求路由到目标之前对其进行重写。重写请求不会改变在评估规则条件时做出的路由决定。当客户端发送的URL或主机标头与目标预期的不同时,这很有用。
使用规则转换将修改路径、查询字符串和主机标头的责任移交给负载均衡器。这样就无需向应用程序代码添加自定义修改逻辑或依赖第三方代理来执行修改。
应用程序负载均衡器支持监听器规则的以下转换。
转换
host-header-rewrite-
重写请求中的主机标头。转换使用正则表达式来匹配主机标头中的模式,然后将其替换为替换字符串。
url-rewrite-
重写请求网址。转换使用正则表达式来匹配请求网址中的模式,然后将其替换为替换字符串。
变换基础知识
-
您可以为每条规则添加一个主机标头重写转换和一个 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,即使您的后端服务发生变化,您的前端 URLs 也可以保持用户和搜索引擎的一致性。您还可以简化复杂的 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 重定向有何不同
| 特征 | 网址重定向 | 网址重写 |
|---|---|---|
| 网址显示 | 浏览器地址栏的变化 | 浏览器地址栏没有变化 |
| 状态代码 | 使用 301(永久)或 302(临时) | 状态码未更改 |
| Processing | 浏览器端 | 服务器端 |
| 常见用途 | 域名变更、网站整合、修复损坏的链接 | 清理 URLs 搜索引擎优化,隐藏复杂结构,提供旧版网址映射 |