在WordPress 5.7将支持一键从http切换到https一文中,我们提到了这个功能,今天将详细介绍。WordPress 5.7将具有许多增强功能,可简化从HTTP到HTTPS的网站迁移。作为为用户提供更准确建议的基础,WordPress将能够检测当前环境是否已经支持HTTPS。如果是这种情况,它将在“站点运行状况”的“ HTTPS状态”部分中提供一个号召性用语按钮,单击该按钮即可将站点从HTTP切换到HTTPS。
“站点运行状况”部分中的总体指南已得到改进,现在允许托管服务提供商提供自定义URL以及说明或一键式更新。
检测HTTPS的状态和环境支持
WordPress 5.7引入了一个新函数wp_is_using_https()
,如果“站点地址”(home_url()
)和“ WordPress地址”(site_url()
)都使用HTTPS作为其方案,该函数将返回true
。本质上,将这两个URL均更改为HTTPS正式表示该站点正在使用HTTPS。虽然还有其他方法可以在WordPress中部分启用HTTPS(例如,使用FORCE_SSL_ADMIN
常量),但新的检测机制着重于在整个站点(即其前端和后端)中使用HTTPS。
除了提供用于检查是否正在使用HTTPS的单个功能之外,还可以调用新的检测函数wp_is_https_supported()
来检查环境是否正确支持HTTPS。现在,它在站点健康中用于提供更准确的反馈:如果环境已经支持HTTPS,则用户可以立即进行切换,而无需他们的托管公司参与。在后台,检测功能基于新的内部选项https_detection_errors
,该选项由每天两次的Cron挂钩控制,其工作方式如下:
- 它使用启用的参数
sslverify
向网站的HTTPS版本发出请求。- 如果请求成功,则已经存在有效的SSL证书。
- 在这种情况下,该函数还会检查响应中的HTML主体是否实际上属于同一WordPress网站;通常是这种情况,但是需要进行额外的检查以适应网站和环境,例如将自定义HTML内容放置在URL下。如果HTML正文属于同一WordPress网站,则可以将环境切换到HTTPS。否则,WordPress本身无法可靠地完成切换到HTTPS的操作,因为其内容并不完全由它控制。
- 如果请求失败,它将再次尝试相同的请求,除非已禁用
sslverify
参数。- 如果该请求成功,则表示存在SSL证书,但无法对其进行验证,例如,该证书适用于自签名证书。
- 如果该请求也失败,则意味着该站点完全无法通过HTTPS访问。
- 如果请求成功,则已经存在有效的SSL证书。
该wp_is_https_supported()
函数仅查看https_detection_errors
由Cron挂钩控制的选项,如果没有存储错误,则该函数返回true
。
一键迁移到HTTPS
将WordPress网站从HTTP迁移到HTTPS的一个主要难题是,需要修复仍在使用HTTP版本的现有数据库内容中的所有硬编码网址,以避免出现混合内容警告。这些网址通常是使用数据库替换插件或WP-CLI迁移的,但是此过程很繁琐,而且对许多WordPress管理员而言并不直观。
WordPress 5.7引入了一项新wp_replace_insecure_home_url()
函数,该函数已与各种内容挂钩,可即时替换这些不安全的网址。它依赖于另一个新函数wp_should_replace_insecure_home_url()
,该函数确定是否需要运行网址替换逻辑。自动重写内容必须满足以下所有条件:
- 该网站必须使用HTTPS,通过
wp_is_using_https()
。 https_migration_required
必须启用一个新的内部标志选项。当“站点地址”和“ WordPress地址”切换到具有现有内容的站点上的HTTPS副本时,将自动启用该选项。(换句话说,一个fresh_site
不会触发立即切换到HTTPS的内容重写逻辑。)- “站点地址”和“ WordPress地址”必须使用相同的域名。
通过对不安全URL进行内容重写,将站点从HTTP切换到HTTPS所需的唯一更改是将“站点地址”和“ WordPress地址”更新为它们的HTTPS副本。尽管这仅需要更新两个文本输入字段,但仍可以简化此操作。这就是WordPress 5.7包含另一个新函数wp_update_urls_to_https()
的原因,该函数会相应地更新两个URL。它还包括一个额外的检查,以验证这是否导致WordPress正确识别了该站点使用HTTPS;如果不是,更改将自动恢复以防止出现任何意外问题。
尽管WordPress 5.7引入的一键式迁移不支持高级站点配置,例如“站点地址”和“ WordPress地址”不同,但是在常见情况下,它可以大大简化迁移。此外,高级配置通常由更精通技术的用户使用,他们已经知道如何迁移到HTTPS。
想要实际替换数据库中URL的管理员仍然可以这样做。在这种情况下,建议删除该https_migration_required
选项,以避免不必要地运行URL重写逻辑。另外,URL重写功能可以完全取消,如下所示:
remove_filter( 'the_content', 'wp_replace_insecure_home_url'
);
remove_filter( 'the_excerpt', 'wp_replace_insecure_home_url'
);
remove_filter( 'widget_text_content', 'wp_replace_insecure_home_url'
);
remove_filter( 'wp_get_custom_css', 'wp_replace_insecure_home_url'
);
改进的站点健康指南
“站点运行状况”中的“ HTTPS状态”部分已得到改进,以指导用户更多地使用HTTPS。如果环境已经支持HTTPS(通过wp_is_https_supported()
),则界面现在将包含一个按钮,只需单击一次即可切换两个站点的URL(使用wp_update_urls_to_https()
)。用户将需要具有新的update_https
元功能才能执行切换;默认情况下,此功能将授予同时具有manage_options
和update_core
的每个用户。
进行了各种较小的改进,以更准确地描述站点的配置。例如,依赖WP_HOME
或WP_SITEURL
常量的网站现在会看到此信息,因为这意味着WordPress无法自动更新这些URL。
现在,在“ HTTPS状态站点运行状况”总体测试中不使用HTTPS的严重性设置为“严重”,而在“建议”之前。这意味着不使用HTTPS的站点现在将在“站点运行状况”仪表板小部件中看到“应该改进”状态,进一步突出显示了这一点。
提供用于切换到HTTPS的自定义支持URL
为了进一步帮助引导WordPress管理员转向使用HTTPS,托管提供商拥有自己的如何切换到HTTPS的支持内容,现在可以将这些URL提供给WordPress,以便用户可以直接从其管理面板获取该指南。
- 提供自己的专用HTTPS支持内容的主机可以提供URL,该URL可以通过设置
WP_UPDATE_HTTPS_URL
环境变量或连接到新的wp_update_https_url
过滤器中来获得。如果未提供此类URL,则默认URL链接到此HTTPS支持文章。 - 提供实用程序以自动将站点切换到HTTPS的主机可以通过设置
WP_DIRECT_UPDATE_HTTPS_URL
环境变量或通过挂钩到新的wp_direct_update_https_url
过滤器来提供URL 。如果未提供此类URL,则默认URL会触发上述WordPress一键式机制。
要了解更多详情,请参阅有关HTTPS检测的工单#47577和有关HTTPS迁移的#51437。
如果你可以访问YouTube,可以看下视频演示:https://youtu.be/wRVAY_Lwoco