【发布时间】:2016-07-24 22:10:49
【问题描述】:
我一直在网上寻找解决方案,但我只能得到 1 和 2 的工作。
-
http://www.example.com到https://www.example.com -
www.example.com到https://www.example.com -
http://example.com到https://www.example.com -
https://example.com到https://www.example.com -
https://example.com到https://www.example.com -
example.com/page.aspx到https://www.example.com/page.aspx
要求:
- 所有网址都是 HTTPS
- 所有没有 WWW 的 URL 都显示 WWW
- 所有其他重定向工作,查询字符串和参数结转等。
所以主要问题是,如果没有指定协议(http 或 https),那么如果我输入 example.com/blah,那么它会被转换为 www.example.com/blah,但放置一个协议(http 或 https ) 在前面,它会断开链接。
由于我目前没有将非 WWW URL 移动到 WWW 的规则,所以我不确定它在做什么,如果我必须这样做,我如何让它与 HTTP 到 HTTPS 一起使用。
我已尝试将 HTTP 转至 HTTPS 的规则与非 WWW 转至 WWW 的规则放在一起,但它不起作用(您将看到的第一个示例 - 底部示例是我在时刻)。
我尝试使用
{HTTP_HOST},而不是在规则的重定向部分写出我网站的 URL。我尝试将规则分成 2 个,一个用于 HTTP 到 HTTPS,一个用于无 WWW 到 WWW。
但似乎没有任何效果。
目前我只是在使用我的主机文件并练习,在 Win 2012 框中更改网站的 web.config 文件中的规则。
我还有其他规则,例如让www.example.com/plugins 转到.aspx 下的页面(重写),但如果 URL 中没有 www,这些也不起作用。
所以似乎非 WWW URL 重定向到 WWW 是问题,我不知道将其与 HTTP 到 HTTPS 规则结合的最佳方式。
我正在尝试将涵盖 HTTPS/WWW 的两条规则组合起来,除了没有 4/5(非 WWW 到 WWW)之外,这就是这条规则。
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
<add input="{HTTP_HOST}" pattern="^[^www]" />
</conditions>
<action type="Redirect" url="https://www.example.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
顺便说一句,logicalGrouping="MatchAny" 到 "MatchAll" 的实际切换似乎没有什么不同。
只要有人不将 URL 键入为 http://example.com/plugins,它就可以正常工作并重定向到 https://www.example.com/plugins。
我不知道现在有很多人在输入链接时实际上输入了协议(// 也可以),但显然是旧的搜索引擎,以及我需要处理重复内容的站点嵌入链接。
谁能想到这不起作用的原因或我应该尝试什么?
我为端口 80/443 设置了 WWW 和没有的绑定。
我从来没有在这类问题的答案中找到人们谈论 IIS 设置(如绑定和端口)的内容,但我认为它们应该被绑定到 URL 重定向应用程序中,并且您的地址显然需要绑定。
我只是觉得奇怪的是,我之前提出的示例规则与仅提及 HTTP 到 HTTPS 的规则一样有效。
这是我目前正在使用的。也许 IIS 对 www 做了什么?
<rule name="Redirect to HTTPS" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
我什至更改了绑定的顺序,以便非 WWW 绑定先于 WWW 绑定认为可能与它有关。
我控制我的 DNS 并且我的 A 记录设置如下
DNSEntry - WWW
Type - A
Destination - MY IP
所以我对实际上是什么迫使非 WWW URL 转到 WWW URL 感到有点困惑。因为我目前在 web.config 中使用的命令只提到了 HTTPS。
我在想,也许 IIS 中有一些东西(我不是 IIS 8 专家)已经设置了一些东西来做这件事,或者其中一个值的设置应该是一个没有 WWW 的域。
任何帮助将不胜感激。我怀疑是否有许多 URL 指向我的网站,但其中没有 WWW,但如果 SEO 知道我可以将它们全部集中到一个地方,这样我就不会被重复的内容所困扰。
【问题讨论】:
标签: https url-rewriting seo iis-8 isapi-rewrite