IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?

Posted

技术标签:

【中文标题】IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?【英文标题】:IIS Redirect www to non-www and http to https: is it possible to do it with only one Redirect?IIS 将 www 重定向到非 www 和 http 到 https:是否可以仅使用一个重定向来完成? 【发布时间】:2016-09-16 14:22:19 【问题描述】:

在创建两个 IIS URL 重写规则后,我需要避免双重重定向:

1) 将 www 重定向到非 www。

2) 将 HTTP 重定向到 HTTPS。

这是我的代码:

<rule name="Redirect to https" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="HTTPS" pattern="off" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://HTTP_HOSTREQUEST_URI" redirectType="Permanent" appendQueryString="false" />
</rule>
<rule name="CanonicalHostNameRule1" enabled="true">
    <match url="(.*)" />
    <conditions>
        <add input="HTTP_HOST" matchType="Pattern" pattern="^mydomain\.com$" ignoreCase="true" negate="true" />
    </conditions>
    <action type="Redirect" url="https://ABC/R:1" />
</rule>

(ABC 是 mydomain.com 名称,但我必须更改它才能发布问题)

问题是,如果我转到 www,它会进行两次重定向,一次从 www 到非 www,第二次从 http 到 https。

我也尝试过在两种条件下都只使用一个规则,但结果并不好。

有没有办法只做一次重定向?

【问题讨论】:

您可以通过您的 DNS 配置将 www 重定向到非 www,仅供参考...我不认为这被视为重定向。 【参考方案1】:

这是我使用的最终配置:

         <rewrite>
            <rules>
                <rule name="Force non-WWW and SSL" enabled="true" stopProcessing="true">
                  <match url="(.*)" />
                  <conditions logicalGrouping="MatchAny">
                      <add input="HTTP_HOST" pattern="^(www\.)(.*)$" />
                      <add input="HTTPS" pattern="off" />
                  </conditions>
                  <action type="Redirect" url="https://yourdomainname.com/R:1" appendQueryString="true" redirectType="Permanent" />
                </rule>
            </rules>
        </rewrite>

只有一条规则会重定向到非 www 和 https url。

【讨论】:

此规则不适用于xxxx 所有其他组合都有效:(【参考方案2】:

您应该能够使用 HTTP 到 HTTPS,相反的情况会更棘手,具体取决于您的 IIS 设置。

     <rule name="HTTP to HTTPs and www to non-www " enabled="true" stopProcessing="true">
         <match url="(.*)" />
         <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
             <add input="SERVER_PORT" pattern="^80$" />
             <add input="HTTP_HOST" pattern="^www\.example\.com$" />
         </conditions>
         <action type="Redirect" url="https://example.com/R:1" />
     </rule>

请记住,根据您在 IIS 中构建站点的方式(绑定、站点等),这一切都会影响您的重写规则的工作方式以及您要放置它们的位置。在应用级别或作为全局规则。

由于我不知道您的绑定或 IIS 是如何与其他站点构建的,因此不可能 100% 准确地为您编写 URL 重写规则。 所以你可能需要对上面的语法做一些实验。

【讨论】:

以上是关于IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?的主要内容,如果未能解决你的问题,请参考以下文章

将 https 重定向到非 www 和 http 到 www

域重定向到www时如何将www子域重定向到非www

使用 PHP 将 WWW 重定向到非 WWW 重定向

将 WWW 重定向到非 WWW,或者相反? [关闭]

在维护协议 HTTP 或 HTTPS 的同时将 www 重定向到非 www

apache将http重定向到https,将www重定向到非www