近几日,正在做一个使用WordPress 4.9.8开发外贸商务网站的应用,并想集成WooCommerce。由于此前,我购买了西部数码的PHP+MYSQL虚拟主机,但是安装有关Wordpress插件过程中,系统提示最好安装SSL安全证书。于是,我在自己的虚拟主机上购买配置了SSL证书。但问题并不那么简单,在安装了SSL证书后,因为此前已经安装了Wordpress并配置了http访问方式的网址。如今,使用https协议访问Wordpress网站竟然出现网站格式配置乱套的情形。于是,联系west.cn官方技术人员,对方回答的十分及时到位,并提供了如下参考网址。最终,问题得到完满解决。特别整理于下。

From: https://www.west.cn/faq/list.asp?unid=2068

注意事项:

1.如果您的主题/插件使用绝对地址调用了http请求可能会导致网站打开会乱码,或不能有绿锁标识,需要联系程序提供商将所有http请求修改为https

2.由于程序中用于检测https的标识“$_SERVER['HTTPS']"未启用,可能导致网站访问时出现循环,不能登录后台等,需要修改该检测标识

先参考:虚拟主机部署ssl证书(https)流程(https://www.west.cn/faq/list.asp?unid=1853) 完成SSL部署

3.完成后登录WordPress后台 - 设置 - 常规 - 将WordPress地址(URL)/站点地址(URL) 地址修改为https格式,如下截图。

虚拟主机WordPress部署SSL注意事项_第1张图片

提示:部份url地址已写入数据库通过后台方式无法更新的,可以使用phpmyadmin或其他管理工具将数据库中http替换为https(风险操作进行前请务必先对数据库进行备份)。

说明】我使用西部数码提供的MYSQL数据表修改工具把有关记录中的http协议修改为https。涉及的只有一个表格是:wp_posts;因为从这个文件命名来看,自然是存储所有博客文章的表格,因此估计问题不在于这里。于是,修改完后,继续往下操作。

继续修改wp-includes/load.php或wp-includes/functions.php这个文件,搜索is_ssl找到对应的函数,将$_SERVER['HTTPS']修改为$_SERVER["HTTP_FROM_HTTPS"](修改文件前请注意备份)。

虚拟主机WordPress部署SSL注意事项_第2张图片

或将此函数修改为:

function is_ssl() {
    if ( isset( $_SERVER['HTTPS'] ) ) {
        if ( 'on' == strtolower( $_SERVER['HTTPS'] ) ) {
            return true;
        }

        if ( '1' == $_SERVER['HTTPS'] ) {
            return true;
        }
    } elseif ( isset($_SERVER['SERVER_PORT'] ) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
        return true;
    } elseif (isset($_SERVER["HTTP_FROM_HTTPS"])&&$_SERVER["HTTP_FROM_HTTPS"]=='on'){
        return true;
    }
    return false;
}

我作的修改是:wp-includes/load.php,而不是wp-includes/functions.php这个文件。打开文件load.php,搜索is_ssl找到对应的函数,将$_SERVER['HTTPS']修改为$_SERVER["HTTP_FROM_HTTPS"]。

至此,保存上面修改的文件,再使用https协议访问我的Wordpress网址,则原来Wordpress网站内容样式一切正常!即问题得到修复!

参考

  • 部署https(ssl)后设置301跳转将http跳转到https(https://www.west.cn/faq/list.asp?unid=1419)
  • https://www.west.cn/faq/list.asp?unid=2068