【问题标题】:Why is my 301 Redirect Causing Mixed Content Errors?为什么我的 301 重定向会导致混合内容错误?
【发布时间】:2015-12-15 22:39:12
【问题描述】:

我有一个运行 Umbraco CMS 的 ASP.Net MVC 网站。我们正在为 SEO 目的进行一些修改。其中之一包括将所有 URL 小写。我已经设置了一个 IIS URL 重定向规则,对所有传入的 URL 执行 301 重定向到 URL 的 ToLower 版本。这是 IIS 创建的默认规则:

    <rule name="LowerCaseRule" stopProcessing="true">
        <match url="[A-Z]" ignoreCase="false" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
        <action type="Redirect" url="{ToLower:{URL}}" redirectType="Permanent" />
    </rule>

我还有一些额外的规则(http => https,删除尾部斜杠),但这似乎是问题之一。

正如预期的那样,这个 ToLower 降低了所有 url。不幸的是,这包括如下路径:

    /Content/MySite/Theme/css/bootstrap.min.css

这与通过 HTTPS 提供的主页相结合会导致混合内容错误。加载图像时仍会出现警告,但脚本和样式表会被阻止。

我能看到的唯一解决方案是检查整个解决方案并手动将每个 URL 小写。但这反而违背了使用 URL 重定向的目的。这也是疯狂的片状,因为我肯定会错过一些。

如何更改此规则或添加其他规则以避免这些混合内容错误?

【问题讨论】:

    标签: asp.net-mvc redirect iis


    【解决方案1】:

    听起来并非所有内容都通过 HTTPS 提供以获取混合内容消息。您是否使用您的网络浏览器开发工具验证了这一点? 我还对开发工具网络选项卡以及您为未加载的内容返回的状态代码感兴趣。

    【讨论】:

    • 内容通过 HTTPS 提供。但是,当 IIS 将调用从“/Content/MySite/Theme/css/bootstrap.min.css”重定向到“/content/mysite/theme/css/bootstrap.min.css”时,该重定向将作为 HTTP 发送,因此混合内容警告。我需要强制重定向以遵守协议,但我不知道该怎么做。
    • 好的,所以 http=>https 规则对引导文件没有生效。您是否在这条规则中有任何内容说不要对 CSS 文件执行此操作或仅对 aspx 执行此操作?我假设这个文件是从有这个规则的同一个网站上提供的。
    • Hrm,经过更多研究,看起来 https 重定向实际上并不是针对 .js 文件。现在它是,我得到404s。 IE,无法通过 https 提供内容。现在问题变成了如何让 IIS 能够通过 https 提供该内容。
    • 好的,如果 IIS 通过 HTTPS 为您的页面提供服务,那么我怀疑是 IIS 需要配置,因为您已经在端口/协议上为您的站点提供服务。我现在猜测的是 Umbraco 的参与……以下链接在应用程序 url 的底部有一个配置设置,如果你还没有指定 https,你可以指定它。不过,我不确定 Umbraco 什么时候出现,祝你好运our.umbraco.org/documentation/reference/config/umbracosettings
    • 我实际上认为问题在于我们的负载均衡器设置。 IIS 只提供 HTTP 页面,这些页面在负载均衡器中加密,然后作为 HTTPS 传递。我认为来自浏览器的资源调用以 HTTP 的形式传入负载均衡器,然后以 HTTP 的形式传递到 Web 服务器,在那里它们被转换为 HTTPS,从而导致 404。需要发生的是负载均衡器做转换而不是IIS。也许 IIS HTTP -> HTTPS 重定向规则是错误的方法,应该在负载均衡器上完成。
    猜你喜欢
    • 2014-08-12
    • 2019-07-29
    • 2020-02-24
    • 1970-01-01
    • 2023-03-08
    • 2017-10-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多