【问题标题】:How to get a URL Rewrite for HTTP to HTTP AND non WWW to WWW to work如何让 HTTP 到 HTTP 和非 WWW 到 WWW 的 URL 重写工作
【发布时间】:2016-07-24 22:10:49
【问题描述】:

我一直在网上寻找解决方案,但我只能得到 1 和 2 的工作。

  1. http://www.example.comhttps://www.example.com
  2. www.example.comhttps://www.example.com
  3. http://example.comhttps://www.example.com
  4. https://example.comhttps://www.example.com
  5. https://example.comhttps://www.example.com
  6. example.com/page.aspxhttps://www.example.com/page.aspx

要求:

  • 所有网址都是 HTTPS
  • 所有没有 WWW 的 URL 都显示 WWW
  • 所有其他重定向工作,查询字符串和参数结转等。

所以主要问题是,如果没有指定协议(httphttps),那么如果我输入 example.com/blah,那么它会被转换为 www.example.com/blah,但放置一个协议(httphttps ) 在前面,它会断开链接。

由于我目前没有将非 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


    【解决方案1】:

    试试下面的代码:

        <rule name="Redirect to HTTPS" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="^OFF$" />
                </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
        </rule>
    

    How to force HTTPS using a web.config file

    IIS 7.5 URL Redirect for specific patterns

    Override an IIS rewrite rule for child site?

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 1970-01-01
      • 2017-12-04
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多