我正在尝试使用 IIS 中的重写映射功能编写动态子域重定向规则,因为我们的 DNS 服务器将 *.myapp.com 路由到同一个负载均衡器并最终路由到同一个应用程序。
这是我当前没有重写地图的工作实现(仅使用重定向规则):
<rules>
<rule name="Redirection rule for transition convenience when client requests new sub-domain url" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^(OLD_CLIENT\.)(.*)$" />
</conditions>
<action type="Redirect" url="https://NEW_CLIENT.{C:2}/{R:1}" appendQueryString="true" redirectType="Found" />
</rule>
</rules>
现在,我想实现同样的目标,但允许我们的运营团队在不创建新的重定向规则的情况下实现上述目标,而只需在重写映射中添加新的映射条目即可。例如,只需执行以下操作:
我能够让重写映射与相对路径一起使用,但是当我指定 old-client.myapp.com -> new-client.myapp.com 之类的内容时,它似乎与条件不匹配。
此外,与我没有重写映射的当前工作实现一样,我希望这样做而不必特别提及“myapp.com”,而是使用通配符匹配。这样,我可以让重定向规则在以下所有场景中工作:
- old-client.localhost -> new-client.localhost(本地)
- 旧客户端.uat.myapp.com -> 新客户端.uat.myapp.com (UAT)
- 旧客户端.myapp.com -> 新客户端.myapp.com (PROD)
- 等(我们的开发人员可以指定自定义 url 用于测试目的 - 例如 mytestapp.com)
这是我在实现这一目标方面正在进行的一些工作:
<rewriteMaps>
<rewriteMap name="Test">
<add key="^(OLD_CLIENT\.)(.*)$" value="https://NEW_CLIENT.{C:2}/{R:1}" />
<!-- if possible, my final objective is something simpler like this: -->
<add key="OLD_CLIENT" value="NEW_CLIENT" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Using rewrite maps (test)" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{Test:{REQUEST_URI}}" pattern="..." />
</conditions>
<action type="Redirect" url="..." appendQueryString="false" />
</rule>
</rules>
注意:我已经在 SO / 其他来源中搜索了许多关于此的现有问题,但我相信没有什么特别涉及通过 Rewrite Maps使用通用规则进行子域重定向。