C# URL重写多重和条件重定向

C# URL重写多重和条件重定向,c#,url,url-rewriting,C#,Url,Url Rewriting,我正在寻找URL重写规则,以从下面要重定向到的IP子网列表中重定向到inte.XYZ.com、prep.XYZ.com和prod.XYZ.com的任何请求 111.000.111.0/24 111.111.222.0/22 111.222.333.0/24 我已将规则编写如下: <rule name="RedirectToXYZTest" stopProcessing="true"> <match url=".*"

我正在寻找URL重写规则,以从下面要重定向到的IP子网列表中重定向到inte.XYZ.com、prep.XYZ.com和prod.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>

,给定正则表达式(如111.000.111.3)中的任何Ip地址范围都应满足重定向条件


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

我想到的第一个想法是使用
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>

下面是我使用的合并正则表达式模式。 默认的逻辑分组是MatchAll,它将验证http_主机和远程地址 注: REMOTE_ADDR只在本地工作&因此在本地测试规则是很好的。一旦部署,它将不包含访问者的真实IP。 该规则需要适用于HTTP_True_Client_IP,而不是用于生产的远程地址

<rule name="RedirectToXYZTest" stopProcessing="true">
   <match url=".*" />
   <conditions>
      <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}$|^111\.111\.222\.\d{1,3}$^111\.222\.333\.\d{1,3}$" />
   </conditions>
   <action type="Redirect" url="https://test.xyz.com/" />
</rule>


注意。

这将起作用,但从代码可读性的角度来看,有很多重复代码我无法使用这种方法,但您的解决方案让我了解了如何实现它。我可以使用Remote_ADDR中的ORing将模式合并为一个。谢谢你的意见。