网站
启用 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 内容和块设置。
- 插件设置,特别是页面构建器和滑块插件。
siteurl和home选项。
这些都不会自动更新。启用 SSL 后想知道为什么挂锁坏了是最常见的支持问题之一,这就是原因。
第 1 步:在服务器级强制 HTTPS
在触及数据库之前,请确保每个访问者首先都访问到 HTTPS。
- 登录 KPanel 并点击左侧边栏中的网站。
- 点击你的网站。
- 打开设置。
- 在行为下,打开强制 HTTPS。
- 点击保存更改。

所有 HTTP 请求现在都在服务器级别重定向到 HTTPS,在网站运行之前。
强制 HTTPS 处理进入的请求。它不重写已存储在数据库内的 URL,因此单独使用不会清除由硬编码 http:// 图像引起的混合内容警告。你需要同时执行第 1 步和第 2 步。
如果 SSL 尚未激活或证书看起来有问题,请从 SSL 证书开始。
第 2 步:重写已存储的 URL
这是真正解决混合内容的修复。
- 打开网站,然后打开 WordPress 选项卡,然后打开快速操作部分。
- 找到搜索和替换卡片并点击配置。
- 在**查找(旧值)**中输入
http://yourdomain.co.nz。 - 在替换为中输入
https://yourdomain.co.nz。 - 保持试运行(仅预览,无更改)勾选并点击预览。
- 查看计数和每表分解。
- 取消勾选试运行,点击运行并确认。
替换之前会自动进行完整备份,每个表都包括在内,包括由插件创建的表。序列化的插件设置会得到正确处理。
不要使用 phpMyAdmin 中的 SQL 查询执行此操作。WordPress 将插件和主题设置存储为序列化字符串,记录每个值的长度,因此原始 REPLACE() 会破坏它们,设置会无声地重置为空。除了恢复备份,没有修复方法。完整说明见 运行搜索和替换。
如果你的套餐包含控制台,等效命令是:
search-replace 'http://yourdomain.co.nz' 'https://yourdomain.co.nz' --all-tables --dry-run
删除 --dry-run 以应用它,并先自己进行备份:控制台不会。
第 3 步:清除所有缓存
页面的缓存副本会继续提供旧的 HTTP URL,即使在数据库修复后很久,这就是人们经常认为替换没有起作用的原因。
- WordPress,然后快速操作,然后清空缓存。
- WordPress,然后缓存,然后清除缓存,如果启用了完整页面缓存。
- 性能,然后 Kapsule CDN,然后清除,如果启用了 CDN。见 清除 CDN 缓存。
- 任何缓存插件,从其自身的设置屏幕。
- 你自己的浏览器。在隐私窗口中测试,这样就不会被自己的缓存迷惑。
第 4 步:查找剩余的内容
大多数网站在第 2 步后是干净的。当警告仍然存在时,找到确切的资源而不是猜测。
浏览器控制台。 用 F12 打开开发者工具,进入控制台选项卡,然后重新加载。混合内容显示为命名有问题资源的完整 URL 的明确警告。该 URL 会告诉你哪个插件或主题负责。
网络选项卡。 按 http:// 过滤,列出页面发出的每个不安全请求。
页面源。 加载页面、查看源代码,然后搜索 http://。忽略 xmlns 属性和模式声明内的任何内容:这些是标识符,不是请求。
常见的幸存者及每个的处理方法:
| 你找到的内容 | 修复 |
|---|---|
| 主题自定义工具设置中的图像或徽标 | 在自定义工具中重新上传或重新选择它 |
页面构建器模块,其中有手动输入的 http:// 图像 URL | 编辑该模块并更正 URL |
| 滑块插件自己的设置表 | 重新保存滑块,或使用 --all-tables 运行搜索和替换 |
| 来自第三方域的字体或脚本 | 检查提供商是否提供 HTTPS。现在大多数都提供。切换 URL |
| 来自旧供应商的跟踪像素或嵌入 | 如果供应商没有 HTTPS,将其移除。这是一个破坏的依赖关系,不是 Kapsule 问题 |
主题模板文件中硬编码的 http:// | 编辑模板,或更好地使用 https 或协议相对引用 |
如果恰好一个页面受影响而网站其余部分干净,罪魁祸首是该页面上的内容,而不是网站范围的设置。在编辑器中打开它并查看它嵌入的媒体。
确认已修复
- 在隐私窗口中加载网站。
- 挂锁应该是实心的,没有警告三角形和没有划掉的指示。
- 点击挂锁。浏览器报告连接安全,没有混合内容通知。
- 打开控制台并再次重新加载。零混合内容警告。
- 检查深层页面,不仅仅是主页:内部页面、有图像的博客文章以及商店上的结账。
防止其再次发生
- 保持强制 HTTPS 开启。 这是一个单行设置,消除了一整类问题。
- 永远不要将完整
http://URL 输入内容中。 使用媒体库,现在它存储 HTTPS 地址。 - 安装请求 URL 的任何内容后检查插件设置。
- 在插件更新后留意返回的警告。 某些插件会重置自己存储的 URL。
- 在任何迁移后重新运行搜索和替换,因为导入的数据库会带上旧主机的 URL:从 cPanel 迁移网站。
故障排除
挂锁对我来说没问题,对同事来说损坏了。 缓存页面。让他们在隐私窗口中重新加载。
替换后网站完全损坏。 恢复自动运行前备份:从备份恢复。
控制台显示不是我的域上的混合内容警告。 第三方资源。你无法修复他们的服务器:要么他们支持 HTTPS 并且你切换 URL,要么你删除资源。
一切都是 HTTPS 但网站根本无法加载。 这不是混合内容。从 网站无法加载开始并检查 SSL 证书上的证书。
如果你已经完成了所有这些并且警告仍然存在,请通过电子邮件发送至 support@kapsulehost.com,附上受影响的 URL 和浏览器控制台警告的确切文本。