首页 > 解决方案 > URL 重写多个 AND 条件重定向

问题描述

我正在寻找一个 URL 重写规则来重定向从下面的 IP 子网列表中对www.XYZ.com、inte.XYZ.com、prep.XYZ.com 和 prod.XYZ.com 发出的任何请求以重定向到https: //test.XYZ.com

111.000.111.0/24

111.111.222.0/22

111.222.333.0/24

我写的规则如下:

<rule name="RedirectToXYZTest" stopProcessing="true">
   <match url=".*" />
   <conditions logicalGrouping="MatchAny">
      <add input="{HTTP_HOST}" pattern="^www\.XYZ\.com$|^inte\.XYZ\.com$|^prep\.xyz\.com$|^prod\.xyz\.com$" />
      <add input="{REMOTE_ADDR}" pattern="^111\.000\.111\.\d{1,3}$" />
      <add input="{REMOTE_ADDR}" pattern="^111\.111\.222\.\d{1,3}$" />
      <add input="{REMOTE_ADDR}" pattern="^111\.222\.333\.\d{1,3}$" />
   </conditions>
   <action type="Redirect" url="https://test.xyz.com/" />
</rule>

上述问题是,由于 matchany 逻辑条件,该条件即使适用于任何一种条件。我需要一个 Http_Host && 的 AND 条件来执行重定向操作。

即,如果 url 是 www.xyz.com,给定正则表达式中的任何 Ip 地址范围,如 111.000.111.3 都应该满足重定向的标准。

找不到入站规则的任何先决条件。

标签: c#urlurl-rewriting

解决方案


我想到的第一个想法是使用定义三个不同的规则MatchAll

<rules>
   <rule name="RedirectToXYZTest1" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
         <add input="{HTTP_HOST}" pattern="^www\.XYZ\.com$|^inte\.XYZ\.com$|^prep\.xyz\.com$|^prod\.xyz\.com$" />
         <add input="{REMOTE_ADDR}" pattern="^111\.000\.111\.\d{1,3}$" />
      </conditions>
      <action type="Redirect" url="https://test.xyz.com/" />
   </rule>
   <rule name="RedirectToXYZTest2" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
         <add input="{HTTP_HOST}" pattern="^www\.XYZ\.com$|^inte\.XYZ\.com$|^prep\.xyz\.com$|^prod\.xyz\.com$" />
         <add input="{REMOTE_ADDR}" pattern="^111\.111\.222\.\d{1,3}$" />
      </conditions>
      <action type="Redirect" url="https://test.xyz.com/" />
   </rule>
   <rule name="RedirectToXYZTest3" stopProcessing="true">
      <match url=".*" />
      <conditions logicalGrouping="MatchAll">
         <add input="{HTTP_HOST}" pattern="^www\.XYZ\.com$|^inte\.XYZ\.com$|^prep\.xyz\.com$|^prod\.xyz\.com$" />
         <add input="{REMOTE_ADDR}" pattern="^111\.222\.333\.\d{1,3}$" />
      </conditions>
      <action type="Redirect" url="https://test.xyz.com/" />
   </rule>
</rules>

推荐阅读