什么是混合内容
浏览器只有在页面及其加载的所有内容都通过 HTTPS 传输时,才会将页面视为安全的。如果 HTTPS 页面从 http:// 地址拉取图像、脚本、样式表、字体或 iframe,浏览器会标记它。
浏览器将此分为两类,其行为大不相同:
- 主动混合内容:脚本、样式表、iframe 和 XHR。浏览器会完全阻止这些。布局会崩溃,滑块停止工作,表单无法提交。这是具有破坏性的那一类。
- 被动混合内容:图像、音频和视频。这些通常仍会加载,但挂锁会被降级或移除。
因此,站点可能看起来完全正常,但仍然会失去挂锁,或看起来损坏但页面本身没有明显错误。
启用 SSL 后为什么会发生这种情况
启用 SSL 会改变站点的提供方式。它不会改变站点内存储的内容。
WordPress 将绝对 URL 写入数据库,因此曾在 HTTP 上运行过任何时间的站点在以下位置保存了 http:// 地址:
- 文章和页面内容,包括通过编辑器插入的每张图像。
- 媒体附件记录。
- 主题定制器设置和主题选项。
- 小工具内容和区块设置。
- 插件设置,特别是页面构建器和滑块插件。
siteurl和home选项。
以上都不会自动更新。启用 SSL 然后想知道为什么挂锁坏了,是最常见的支持问题之一,这就是原因。
步骤 1:在服务器上强制 HTTPS
在接触数据库之前,请确保每位访客首先登陆在 HTTPS 上。
- 登录 KPanel,然后单击左侧边栏中的网站。
- 单击您的站点。
- 打开设置。
- 在行为下,打开强制 HTTPS。
- 单击保存更改。

每个 HTTP 请求现在都会在您的站点运行前在服务器上重定向到 HTTPS。
强制 HTTPS 处理传入的请求。它不会重写已存储在数据库中的 URL,因此单独它不会清除由硬编码 http:// 图像引起的混合内容警告。您需要同时执行这个和步骤 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,请将其删除。这是损坏的依赖项,不是 KapsuleHost 问题 |
主题模板文件中的硬编码 http:// | 编辑模板,或更好的是,使用 https 或协议相对参考 |
如果只有一页受到影响,而站点的其余部分是干净的,那么原因是该页面上的内容,而不是站点范围的设置。在编辑器中打开它并查看它嵌入的媒体。
确认已修复
- 在私密窗口中加载站点。
- 挂锁应该是实心的,没有警告三角形,也没有划掉的迹象。
- 单击挂锁。浏览器报告连接安全,没有混合内容通知。
- 打开控制台并再次重新加载。零个混合内容警告。
- 检查深层页面,而不仅仅是主页:内部页面、包含图像的博文以及商店上的结账。
防止其再次发生
- 保持强制 HTTPS 打开。 这是一项单行设置,可消除整个问题类别。
- 永远不要将完整的
http://URL 输入内容。 使用媒体库,该库现在存储 HTTPS 地址。 - 安装任何要求 URL 的插件后检查插件设置。
- 在插件更新后留意返回的警告。 某些插件会重置其自己存储的 URL。
- 在任何迁移后重新运行搜索和替换,因为导入的数据库会带来旧主机的 URL:从 cPanel 迁移网站。
疑难解答
对我来说挂锁很好,对同事来说是坏的。 缓存的页面。让他们在私密窗口中重新加载。
替换后站点完全损坏。 恢复自动预运行备份:从备份恢复。
控制台显示不是我的域上的混合内容警告。 第三方资源。您无法修复他们的服务器:要么他们支持 HTTPS 并且您切换 URL,要么您删除资源。
一切都是 HTTPS 但站点根本无法加载。 那不是混合内容。从网站无法加载开始,并检查 SSL 证书 上的证书。
如果您已完成所有这些操作且警告仍然存在,请发送电子邮件至 support@kapsulehost.com,并提供受影响的 URL 和浏览器控制台警告的确切文本。