网站

启用 HTTPS 后修复混合内容警告

When SSL is active but the browser padlock is missing, broken or showing a warning, the cause is almost always mixed content: the page itself is encrypted but something on it is still being fetched…

当 SSL 处于活跃状态但浏览器挂锁缺失、损坏或显示警告时,原因几乎总是混合内容:页面本身已加密,但其中的某些内容仍然通过普通 HTTP 获取。本指南说明为什么会发生这种情况,如何找到每个有问题的资源,以及如何正确修复而不是临时遮掩。

什么是混合内容

浏览器仅在页面及其加载的所有内容都通过 HTTPS 到达时,才将页面视为安全。如果 HTTPS 页面从 http:// 地址拉取图像、脚本、样式表、字体或 iframe,浏览器会将其标记。

浏览器将其分为两类,行为差异很大:

  • 活跃混合内容:脚本、样式表、iframe 和 XHR。浏览器完全阻止这些。布局崩溃、滑块停止工作、表单无法提交。这是破坏性的。
  • 被动混合内容:图像、音频和视频。这些通常仍然会加载,但挂锁会降级或移除。

因此,网站可能看起来完全正常,但仍然失去挂锁,或看起来损坏而页面本身没有明显错误。

启用 SSL 后为什么会发生这种情况

开启 SSL 改变了网站的提供方式。但不改变网站内部存储的内容。

WordPress 将绝对 URL 写入数据库,因此曾在 HTTP 上运行过任何时间段的网站都有 http:// 地址保存在:

  • 文章和页面内容,包括通过编辑器插入的每张图像。
  • 媒体附件记录。
  • 主题自定义工具设置和主题选项。
  • Widget 内容和块设置。
  • 插件设置,特别是页面构建器和滑块插件。
  • siteurlhome 选项。

这些都不会自动更新。启用 SSL 后想知道为什么挂锁坏了是最常见的支持问题之一,这就是原因。

第 1 步:在服务器级强制 HTTPS

在触及数据库之前,请确保每个访问者首先都访问到 HTTPS。

  1. 登录 KPanel 并点击左侧边栏中的网站
  2. 点击你的网站。
  3. 打开设置
  4. 行为下,打开强制 HTTPS
  5. 点击保存更改

KPanel 中网站的强制 HTTPS 设置

所有 HTTP 请求现在都在服务器级别重定向到 HTTPS,在网站运行之前。

强制 HTTPS 处理进入的请求。它不重写已存储在数据库内的 URL,因此单独使用不会清除由硬编码 http:// 图像引起的混合内容警告。你需要同时执行第 1 步和第 2 步。

如果 SSL 尚未激活或证书看起来有问题,请从 SSL 证书开始。

第 2 步:重写已存储的 URL

这是真正解决混合内容的修复。

  1. 打开网站,然后打开 WordPress 选项卡,然后打开快速操作部分。
  2. 找到搜索和替换卡片并点击配置
  3. 在**查找(旧值)**中输入 http://yourdomain.co.nz
  4. 替换为中输入 https://yourdomain.co.nz
  5. 保持试运行(仅预览,无更改)勾选并点击预览
  6. 查看计数和每表分解。
  7. 取消勾选试运行,点击运行并确认。

替换之前会自动进行完整备份,每个表都包括在内,包括由插件创建的表。序列化的插件设置会得到正确处理。

不要使用 phpMyAdmin 中的 SQL 查询执行此操作。WordPress 将插件和主题设置存储为序列化字符串,记录每个值的长度,因此原始 REPLACE() 会破坏它们,设置会无声地重置为空。除了恢复备份,没有修复方法。完整说明见 运行搜索和替换

如果你的套餐包含控制台,等效命令是:

search-replace 'http://yourdomain.co.nz' 'https://yourdomain.co.nz' --all-tables --dry-run

删除 --dry-run 以应用它,并先自己进行备份:控制台不会。

第 3 步:清除所有缓存

页面的缓存副本会继续提供旧的 HTTP URL,即使在数据库修复后很久,这就是人们经常认为替换没有起作用的原因。

  1. WordPress,然后快速操作,然后清空缓存
  2. WordPress,然后缓存,然后清除缓存,如果启用了完整页面缓存。
  3. 性能,然后 Kapsule CDN,然后清除,如果启用了 CDN。见 清除 CDN 缓存
  4. 任何缓存插件,从其自身的设置屏幕。
  5. 你自己的浏览器。在隐私窗口中测试,这样就不会被自己的缓存迷惑。

第 4 步:查找剩余的内容

大多数网站在第 2 步后是干净的。当警告仍然存在时,找到确切的资源而不是猜测。

浏览器控制台。 用 F12 打开开发者工具,进入控制台选项卡,然后重新加载。混合内容显示为命名有问题资源的完整 URL 的明确警告。该 URL 会告诉你哪个插件或主题负责。

网络选项卡。http:// 过滤,列出页面发出的每个不安全请求。

页面源。 加载页面、查看源代码,然后搜索 http://。忽略 xmlns 属性和模式声明内的任何内容:这些是标识符,不是请求。

常见的幸存者及每个的处理方法:

你找到的内容修复
主题自定义工具设置中的图像或徽标在自定义工具中重新上传或重新选择它
页面构建器模块,其中有手动输入的 http:// 图像 URL编辑该模块并更正 URL
滑块插件自己的设置表重新保存滑块,或使用 --all-tables 运行搜索和替换
来自第三方域的字体或脚本检查提供商是否提供 HTTPS。现在大多数都提供。切换 URL
来自旧供应商的跟踪像素或嵌入如果供应商没有 HTTPS,将其移除。这是一个破坏的依赖关系,不是 Kapsule 问题
主题模板文件中硬编码的 http://编辑模板,或更好地使用 https 或协议相对引用

如果恰好一个页面受影响而网站其余部分干净,罪魁祸首是该页面上的内容,而不是网站范围的设置。在编辑器中打开它并查看它嵌入的媒体。

确认已修复

  1. 在隐私窗口中加载网站。
  2. 挂锁应该是实心的,没有警告三角形和没有划掉的指示。
  3. 点击挂锁。浏览器报告连接安全,没有混合内容通知。
  4. 打开控制台并再次重新加载。零混合内容警告。
  5. 检查深层页面,不仅仅是主页:内部页面、有图像的博客文章以及商店上的结账。

防止其再次发生

  • 保持强制 HTTPS 开启。 这是一个单行设置,消除了一整类问题。
  • 永远不要将完整 http:// URL 输入内容中。 使用媒体库,现在它存储 HTTPS 地址。
  • 安装请求 URL 的任何内容后检查插件设置。
  • 在插件更新后留意返回的警告。 某些插件会重置自己存储的 URL。
  • 在任何迁移后重新运行搜索和替换,因为导入的数据库会带上旧主机的 URL:从 cPanel 迁移网站

故障排除

挂锁对我来说没问题,对同事来说损坏了。 缓存页面。让他们在隐私窗口中重新加载。

替换后网站完全损坏。 恢复自动运行前备份:从备份恢复

控制台显示不是我的域上的混合内容警告。 第三方资源。你无法修复他们的服务器:要么他们支持 HTTPS 并且你切换 URL,要么你删除资源。

一切都是 HTTPS 但网站根本无法加载。 这不是混合内容。从 网站无法加载开始并检查 SSL 证书上的证书。

如果你已经完成了所有这些并且警告仍然存在,请通过电子邮件发送至 support@kapsulehost.com,附上受影响的 URL 和浏览器控制台警告的确切文本。

仍需帮助?

请发送邮件至 support@kapsulehost.com 或在 KPanel 中打开聊天。

打开 KPanel