如何将所有网址组合重定向到https://www.mydomain.ext?

时间:2015-11-15 12:17:45

标签: iis-7.5 windows-server-2008-r2 url-rewrite-module

我有一个使用URL Rewrite运行IIS7.5的Windows 2008服务器。

我有一个网址,并希望此网址的所有排列都重定向到带有www的安全https版本。例如,我想要以下内容:

重定向到:

https://www.mydomain.ext

我已经设置了3条重写规则,但遗憾的是我无法让https://mydomain.ext重定向。

以下是我使用的重写,中间的重写不起作用。但是,我宁愿用一条规则来涵盖所有实例。

    <!-- Redirect http non www to https www -->
    <rule name="Redirect http://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="mydomain.ext" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

    <!-- Redirect https non www to http www -->
    <rule name="Redirect https://mydomain.ext to www" patternSyntax="Wildcard" stopProcessing="true">
      <match url="*" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="https://mydomain.ext" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

    <!-- Redirect http to https -->
    <rule name="Redirect http to https" enabled="true">
        <match url="(.*)" ignoreCase="false" />
        <conditions>
            <add input="{HTTPS}" pattern="off" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
    </rule>

1 个答案:

答案 0 :(得分:0)

上述规则的问题在于协议(https)永远不是主机(HTTP_HOST)的一部分,因此您的规则永远不会匹配。您只需要两个规则,但要确保它们是第一个并停止处理规则(因为重定向通常应该停止它们)。所以这应该工作。请注意,另一个关键的事情是使用&#34;使用^和$&#34;进行完整字符串匹配,您还可以执行反向操作,将所有非特定域重定向到它(请参阅底部):

<!-- Redirect http to https -->
<rule name="Redirect http to https" enabled="true" stopProcessing="true">
    <match url="(.*)" ignoreCase="false" />
    <conditions>
        <add input="{HTTPS}" pattern="off" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

<!-- Redirect http non www to https www -->
<rule name="Redirect mydomain.ext to www" stopProcessing="true">
  <match url="*" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="^mydomain.ext$" />
  </conditions>
  <action type="Redirect" url="https://www.{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

如果您100%确定只想使用某个域,而不是其他任何方式,则可以停止使用该域的所有排列并使用此方法重定向到规范的排列(而不是上面的第二个规则,在此使用否定的案例)

    <rule name="Mydomain" stopProcessing="true">
        <match url="(.*)" />
        <conditions>
            <add input="{HTTP_HOST}" pattern="^www.mydomain.ext$" negate="true" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.ext/{R:1}" />
    </rule>