iis - 使用 IIS 重写映射进行多站点迁移
问题描述
我们有一个带有多个单独网站的服务器:
domain.com/masterSite
domain.com/site1
domain.com/site2
domain.com/siteN
我们正在将多个单独的网站迁移到多租户应用程序 (/mastersite)。我们不是一下子做这一切的;相反,我们一次迁移单个站点(200 多个)。而当一个站点迁移到多租户站点时,我们需要一个转发规则。
例子:
domain.com/site1 --> domain.com/masterSite/site1
domain.com/siteN --> domain.com/masterSite/siteN
站点名称都是随机的,因此我们将使用 Rewrite Map。
问题是我在使用重写映射时无法确定模式匹配,因此无论额外的 URL 数据如何,对路径的所有请求都会被转发。
这是当前状态:
<rewrite>
<rewriteMaps>
<rewriteMap name="ForwardToMTDB" defaultValue="">
<add key="/site1" value="/masterSite/site1" />
<add key="/site2" value="/masterSite/site2" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite Rule" enabled="true" stopProcessing="true">
<match url="(.+)" />
<conditions>
<add input="{ForwardToMTDB:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" logRewrittenUrl="true" redirectType="Found" />
</rule>
</rules>
</rewrite>
应全部转到 domain.com/masterSite/siteN 的请求示例
domain.com/SiteN
domain.com/siteN/
domain.com/siteN/foo/bar
domain.com/siteN/somePage.aspx
domain.com/siteN/blah1/blah2/blah3/blah4/etc
解决方案
所以,我得到了它的工作。这是规则:
<rule name="Redirect Rule" enabled="true" stopProcessing="true">
<match url="^(.+?)([/?$])" />
<conditions logicalGrouping="MatchAny">
<add input="{ForwardToMTDB:{R:1}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="False" redirectType="Found" />
</rule>
我还必须修改重写映射中的键值以排除前导斜杠:
<rewriteMap name="ForwardToMTDB" defaultValue="">
<add key="site1" value="/masterSite/site1" />
<add key="site2" value="/masterSite/site2" />
</rewriteMap>
我阅读了许多与我正在尝试的内容相关的帖子。例如,这篇文章谈到了匹配一个可选的斜杠。我不断地在 IIS 中使用测试模式工具在此基础上进行构建,直到我得到反向引用以始终是我需要的,而不管 URL 中的其他数据如何。
推荐阅读
- .net - JSON反序列化创建列表
- oauth-2.0 - Facebook OAuth 登录未在 ASP.NET Core 2.2 中获取用户配置文件
- typescript - 在 monorepo 代码共享中创建 React App + Typescript
- opencv - Python:时间拉伸波文件 - 三种方法之间的比较
- ios - SWIFTUI 在 TabView 中隐藏当前视图的 navigationBarBackButton
- c++ - 什么可以防止类中相邻成员的重叠?
- javascript - 从 nodejs child_proccess 运行 kubectl
- django - 如何在 Django 设置中指定显式主机名?
- pandas - 删除仅包含一个类别的行 - Pandas - Python
- javascript - 等待 forEach 循环