如何将所有非 www 的 URL 重定向到 https://www。在 IIS 中?

Posted

技术标签:

【中文标题】如何将所有非 www 的 URL 重定向到 https://www。在 IIS 中?【英文标题】:How to redirect all non-www URLs to https://www. in IIS? 【发布时间】:2015-07-14 12:02:51 【问题描述】:

我想在 IIS 8.5 中添加正确的 301 永久重定向规则。我添加了以下规则,但它不起作用。

 <rule name="Redirect top domains with non-www to www" stopProcessing="true">
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="HTTP_HOST" pattern=".*localhost.*" negate="true" />
            <add input="HTTP_HOST" pattern=".*stage\..*" negate="true" />
            <add input="HTTP_HOST" pattern=".*dev\..*" negate="true" />
            <add input="HTTP_HOST" pattern="^(http:\/\/)0,1(www\.)0,1([^\.]+)\.([^\.]+)$" ignoreCase="true" />
          </conditions>
          <action type="Redirect" url="https://www.C:3.C:4" redirectType="Permanent" />
        </rule>

条件

如果 URL 采用 HTTPS 并包含“www”。然后没有重定向。示例:https://www.example.com 如果 URL 是 HTTP,那么它应该被重定向到 HTTPS。示例:http://www.example.com 应重定向到 https://www.example.com 如果 URL 采用 HTTPS 但不包含“www”。那么它应该被重定向到带有“www”的 HTTPS 站点。字首。示例:https://example.com 应重定向到 https://www.example.com 如果 URL 既不包含 HTTPS 也不包含 WWW,则使用“www”重定向到 HTTPS URL。字首。示例:http://example.com 应重定向到 https://www.example.com

总而言之,每个 URL 都应该是 HTTPS 并且应该有“www”。前缀

注意:我已经在 IIS 中安装了URL Rewrite Module。

谁能帮我实现这个目标?

【问题讨论】:

【参考方案1】:

我通过在Web.config 文件中添加两个 URL 重写规则来管理它:

    用于将非 www 重定向到 https://www.domain.com/...

    将 HTTP 重定向到 HTTPS

    <rule name="Redirect top domains with non-www to www" stopProcessing="true">
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="HTTP_HOST" pattern=".*localhost.*" negate="true" />
            <add input="HTTP_HOST" pattern=".*stage\..*" negate="true" />
            <add input="HTTP_HOST" pattern=".*dev\..*" negate="true" />
            <add input="HTTP_HOST" pattern="^([^\.]+)\.([^\.]+)$" />
          </conditions>
          <action type="Redirect" url="https://www.HTTP_HOST/R:1" redirectType="Permanent" />
          <serverVariables>
            <set name="Redirect" value="false" />
          </serverVariables>
     </rule>
    
    
    <rule name="Force HTTPS" enabled="true" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="HTTP_HOST" pattern=".*localhost.*" negate="true" />
            <add input="HTTP_HOST" pattern=".*stage\..*" negate="true" />
            <add input="HTTP_HOST" pattern=".*dev\..*" negate="true" />
            <add input="HTTPS" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://HTTP_HOST/R:1" appendQueryString="true" redirectType="Permanent" />
     </rule>
    

所有带有negate="true" 的条件都用于排除。因此,所有包含“localhost”、“stage”和“dev”的 URL 都被排除在 URL 重写之外。如果不需要,您可以删除这些条件。

在http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module了解更多关于negate属性的信息

【讨论】:

您好,您知道如何更新条件模式 (pattern="^([^\.]+)\.([^\.]+)$") 和重定向url (www.HTTP_HOST/R:1) 以便他们可以捕获和重定向域,例如 .co.uk 和 .uk.com ?? 嗨,我逐字复制了你的代码,但是当我输入http://example.com 时,它会重定向到https://example.com...你知道为什么它没有重定向到https://www.example.com吗?

以上是关于如何将所有非 www 的 URL 重定向到 https://www。在 IIS 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用haproxy进行url路径重定向,非域名跳转

htaccess - 将所有非 www 流量重定向到 www

https 非 www 重定向

markdown [www和https重定向]将所有文件重定向到https url和www域名#www #htaccess

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

将 https://www 重定向到 https://non-www