问题描述
我想在IIS 8.5中添加正确的301永久重定向规则。我添加了以下规则,但它无效。
I want to add the proper 301 permanent redirect rule in IIS 8.5. I've added the following rules but it is not working.
<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。然后没有重定向。示例:
- 如果URL在HTTP中,然后应将其重定向到HTTPS。示例:应重定向到
- 如果网址是HTTPS,但不包含www。然后应该使用www将其重定向到HTTPS站点。字首。示例:应重定向到
- 如果网址既不包含HTTPS也不包含WWW,则使用www重定向到HTTPS网址。字首。示例:应重定向到
- If the URL is in HTTPS and contains "www." then NO redirect. Example: https://www.example.com
- If the URL is in HTTP then it should be redirected to HTTPS. Example: http://www.example.com should be redirected to https://www.example.com
- If the URL is in HTTPS but does NOT contain "www." then it should be redirected to HTTPS site with "www." prefix. Example: https://example.com should be redirected to https://www.example.com
- If the URL neither contains HTTPS nor WWW then redirect to HTTPS URL with "www." prefix. Example: http://example.com should be redirected to https://www.example.com
总结一下,每一个网址应为HTTPS,并且应为www。前缀。
注意:我已安装。
任何人都可以帮我实现这个目标吗?
Can anyone please help me to achieve this?
推荐答案
我通过在 Web.config
文件中添加两个URL重写规则来管理它:
I managed it by adding two URL rewrite rules in Web.config
file:
- 用于将非www重定向到。{ domain} .com /...
-
将HTTP重定向到HTTPS
- For redirecting non-www to https://www.{domain}.com/...
Redirecting HTTP to 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重写中排除。如果不需要,您可以删除这些条件。
All the conditions with negate="true"
are used for exclusion. Hence all URLs which contains "localhost", "stage", and "dev" are excluded from URL rewrite. You can remove these conditions if not required.
在
Read more about negate attribute at http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module
这篇关于如何将所有非www URL重定向到https:// www。在IIS?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!