C# 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 我已将规则编写如下: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=".*"
<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将模式合并为一个。谢谢你的意见。