如何将所有非 www 网址重定向到 https://www。在 IIS 中?
How to redirect all non-www URLs to https://www. in IIS?
我想在 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。
谁能帮我实现这个目标?
我通过在 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 重写之外。如果不需要,您可以删除这些条件。
阅读更多关于 negate 属性的信息
我想在 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。
谁能帮我实现这个目标?
我通过在 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 重写之外。如果不需要,您可以删除这些条件。