如何将所有非 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 中?的主要内容,如果未能解决你的问题,请参考以下文章
htaccess - 将所有非 www 流量重定向到 www
markdown [www和https重定向]将所有文件重定向到https url和www域名#www #htaccess