在 IIS 中将特定域的 URL 从 HTTP 重写为 HTTPS

在 IIS 中将特定域的 URL 从 HTTP 重写为 HTTPS

我需要制定一条全局规则,将所有内容重写http://example.com/https://example.com/。我托管多个域,但我的尝试要么不起作用,要么在所有域上都起作用。

我把这个放在我的applicationHost.config

<globalRules>
  <rule name="Rewrite test" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll">
      <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" />
  </rule>
</globalRules>

<globalRules>
  <rule name="kommunetv SSL">
    <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="http://(.*\.kommunetv.no)(/?.*)" />
       </conditions>
       <action type="Rewrite" url="https://{C:1}{C:2}" appendQueryString="false" />
  </rule>
</globalRules>

尝试了各种匹配模式,也尝试了带{HTTP_HOST}条件的匹配。希望得到一些意见 :)

答案1

<globalRules>适用applicationHost.config于整个服务器 - 所有域。

<conditions logicalGrouping="MatchAll">
    <add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true"/>

这仅检查{HTTPS},所以是的,这将重定向全部域。

<conditions>
    <add input="{HTTP_HOST}" pattern="http://(.*\.kommunetv.no)(/?.*)" />
</conditions>
<action type="Rewrite" url="https://{C:1}{C:2}" appendQueryString="false" />

HTTP_HOST变量仅包含请求中的主机名(即 HTTP 标头的值Host)。它不包含方案或 URL 路径。因此,上述条件永远不会匹配,规则也不会执行任何操作。如果匹配,则将创建一个重定向循环,因为您还需要检查状态HTTPS

您需要检查HTTPSHTTP_HOST。例如:

<conditions logicalGrouping="MatchAll">
    <add input="{HTTPS}" pattern="^off$" />
    <add input="{HTTP_HOST}" pattern="^example\.com$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="true" />

相关内容