Web.config 将某些子站点从 http 重定向到 https

Web.config redirect from http to https for some sub-site

所以我已经在 SO 上搜索和浏览类似主题一段时间了,但没有找到解决方案,我想我可能会问问。

我有一个包含多个子站点的主站点 sites/pages。 在我的 Web.config 主站点文件(影响所有子站点 sites/pages)中,我有以下规则:

<rule name="Redirect to https">
  <match url="(.*)"/>
  <conditions>
    <add input="{HTTPS}" pattern="Off"/>
    <add input="{REQUEST_METHOD}" pattern="^get$|^head$"/>
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
</rule>

此规则将所有请求重定向到主站点下的任何 page/site 到 https:// 这已经有一段时间了。

但是现在,我有 4 个子站点(主站点下的 4 个页面有自己的 URLs),我不想使用 https://。我们称它们为 www.apa.com、www.bepa.com、www.cepa.com、www.depa.com。我在 this similar topic 上看到一些评论说可以在这样的规则中进行排除,但我没有让它起作用。

所以我想我正在寻找一个单独的规则或对当前规则的一些排除,它为我的四个新子站点保留 http 并将所有其他 sites/pages 重定向到 https(目前) .

编辑: 所以我采取了不同的方法。现在我试图说哪些网站应该重定向到 https。以下正则表达式似乎在正则表达式测试器中运行完美,但在 web.config 文件中应用时,没有任何反应:

^(https?:\/\/)?(something\.somethingelse\.com\/?)(.*)$

如果这个正则表达式匹配,我想将所有请求重定向到 https,如果不匹配,它应该保持 http。在 web.config 文件中,它看起来像:

<rewrite>
  <rules>
    <rule name="Redirect to https">
      <match url="/^(https?:\/\/)?(something\.somethingelse\.com\/?)(.*)$/"/>
      <conditions>
        <add input="{HTTPS}" pattern="Off"/>
        <add input="{REQUEST_METHOD}" pattern="^get$|^head$"/>
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
    </rule>
  </rules>
</rewrite>

然而这似乎没有任何作用。它就像不可能匹配完整的 URL 或其他东西。

我想出了一个解决方案:

<rule name="Redirect to https">
  <match url="(.*)"/>
  <conditions>
    <add input="{HTTPS}" pattern="Off"/>
    <add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
    <add input="{HTTP_HOST}" pattern="(.*SomeWordFromMyUrl*)"/>
  </conditions>
  <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
</rule>