对于 WordPress 开启 HTTPS,子凡早在两年前就提供了相关的兼容代码和教程,正常的情况下是可以被完美的兼容,但是不排除某些因为服务器的原因,而导致可能无法正常将整站开启 HTTPS 协议,特别是现在的一些虚拟主机开始支持 SSL 证书部署后出现了页面错位和不兼容的情况,那么今天子凡就来提供一下解决办法。

HTTPS SSL

首先要说明的是,站点页面错位是因为页面没有被正常加载 css 层叠样式表导致,当我们通过 https 协议访问站点时,如果 css 文件是被 http 协议引入,那么浏览器会以安全模式的形式阻止加载,所以导致页面错误的情况。

子凡最近从百度云虚拟主机,到西部数码的虚拟主机,为几个客户都解决了同样的问题,那就是服务器即使部署了 SSL 证书,并且通过 https 访问,服务器是不会正常输出$_SERVER['HTTPS']这个参数,而对于 WordPress 来说,提供了一个站点是否启用 ssl 的判断函数(is_ssl),恰好就是通过$_SERVER['HTTPS']这个参数来判断,所以最后导致的结局就是虚拟主机开启 SSL 证书后,Wordpress 站点的 https 页面错位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// WordPress is_ssl 函数代码
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;
    }
    return false;
}

解决方法

1
2
//强制定义 HTTPS 参数
$_SERVER['HTTPS']='on';

通过修改 WordPress 站点根目录 wp-config.php 文件,将以上代码添加至下方代码的空行处即可。

1
2
/** 设置 WordPress 变量和包含文件。 */
require_once(ABSPATH . 'wp-settings.php');

最后你就可以非常完美的继续使用子凡之前“WordPress 整站开启 HTTPS 协议,让站内链接支持 SSL 证书”教程中的教程方法或代码啦,这时候就可以确定你站点至少不是错位的,如果浏览器的地址栏前面还没有出现“绿锁”,这说明你的主题或者页面中还有非 https 引入的文件,例如最常见的就是图片或者视频资源等,大家可以通过页面源代码和 F12 查看资源载入情况,然后修改和完全的实现,当然也有可能是一些联盟广告载入了 http 的资源,也会直接影响绿锁,泪雪博客偶尔就是这样的一个情况,所以这个没办法。

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/wordpress-ssl-on-vhost.html

发表评论

  1. 大缺缺
    1楼
    大缺缺 2周前 (07-06)

    大佬,请教一个问题西部数码主机,第一次安装wordpress 出现安装界面 css丢失是怎么个情况了?安装界面没有css,然后审查元素发现调用的还是http,怎么解决这个问题了?

    • 张子凡
      回复
      张子凡 2周前 (07-06)
      回复 @大缺缺 :只要确定网站https协议能够访问,那么给你最直接的解决方法就是不要纠结,继续安装,WordPress安装后肯定是支持https协议的。
  2. 嘤嘤嘤
    2楼
    嘤嘤嘤 3个月前 (04-16)

    最近发现了一些问题。。不知道你有没有出现,首先熊掌号原创保护的提交配额500降低到25了,而且熊掌号收录数据已经几天没有更新了,而我每天都提交几篇原创的。。到论坛看了看,发现不止我一个人出现这种问题

    • 张子凡
      回复
      张子凡 3个月前 (04-16)
      回复 @嘤嘤嘤 :原创配额在上周五就更新了,为此我还又更新了Fanly Submit插件呢,你说我能不发现么,熊掌号其实在收录,只是列表不展现了。。。