【问题标题】:URL Rewrite multiple AND conditional redirectURL 重写多个 AND 条件重定向
【发布时间】:2021-02-25 18:51:24
【问题描述】:

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

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 条件来执行重定向操作。

ie 如果 url 是 www.xyz.com ,给定正则表达式中的任何 IP 地址范围,例如 111.000.111.3 都应该满足重定向的条件。

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

【问题讨论】:

    标签: c# url url-rewriting


    【解决方案1】:

    以下是我使用的统一正则表达式模式。 默认的logicalGrouping 是MatchAll,它将验证http_Host && Remote Addr 笔记: REMOTE_ADDR 只能在本地工作,因此最好在本地测试规则。一旦部署,它将不包含访问者的真实 IP。 该规则需要用于 HTTP_True_Client_IP 而不是 Remote_ADDR 用于生产。

    <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>
    

    问候。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这可行,但从代码可读性的角度来看,有很多重复的代码我无法使用该方法,但您的解决方案让我了解了如何实现它。我可以使用 Remote_ADDR 中的 ORing 将模式合并为一个。感谢您的意见。
      猜你喜欢
      • 2017-07-25
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2014-02-05
      • 2020-03-01
      相关资源
      最近更新 更多