博客开始全站支持HTTPS

loveyu-ssl

  出于好玩的目的,在黑五的时候买了几个证书,现在就来玩玩。过程还是挺简单的,只是部署过程中偶遇证书无效的问题。当然,这只是忘了配置证书链,算是小插曲吧。当然接下来还有一系列的配置需要做。
  七牛的CDN是支持HTTPS,果断部署一个。然后修改当前的CDN。不过不能玩强制HTTPS,所以使用了一点小手段,让HTTPS和HTTP共存。由于配置了两套CDN,所以使用了几个全局变量来解决。


define("CDN_SSL", is_ssl());
define("CDN_ALL", CDN_SSL ? "dn-loveyu-cdn.qbox.me" : "loveyu.u.qiniudn.com");
define("CDN_loveyu_org", CDN_SSL ? "dn-loveyu-org.qbox.me" : "loveyu-cdn.qiniudn.com");
define("CDN_PROTOCOL", CDN_SSL ? "https" : "http");

  最后通过配合之前WordPress为js和css添加CDN [http://www.loveyu.org/3494.html]这段代码,进行替换,JS等加载问题,很容易搞定了。

  当然这还没算玩,有些链接还需要处理,比如文章中的http怎么办,最简单的替换就行了,只是不是数据库,依旧代码处理,不过通过这个代码可以处理更多的内容,比如什么空格,代码压缩之类的,实现是相对有趣的多试试吧。


function two_heart_ob_start(){//启用缓存控制,放在header.php的第一行
    ob_start();
}
function two_heart_ob_end(){//输出缓存,放在footer.php的最后一行
    $content = ob_get_contents();
    ob_clean();
    if(is_ssl()){
        //这里会被强制替换,所有加个空格
        $content = str_replace("http ://www.loveyu.org", "http://www.loveyu.org", $content);
    }
    echo str_replace([
        "src="" . CDN_PROTOCOL . "://www.loveyu.org/wp-content/uploads/",
        "src='" . CDN_PROTOCOL . "://www.loveyu.org/wp-content/uploads/",
        "alt=''",
        "alt=""",
        CDN_PROTOCOL.'://www.loveyu.org/avatar/'
    ], [
        "src="" . CDN_PROTOCOL . "://" . CDN_ALL . "/blog/uploads/",
        "src='" . CDN_PROTOCOL . "://" . CDN_ALL . "/blog/uploads/",
        "alt='default'",
        "alt="default"",
        CDN_PROTOCOL."://".CDN_ALL."/blog/avatar/"
    ], $content);
}

  最后一点,怎么让用户启用HTTPS呢?毕竟默认状态下是HTTP的,加个提示,链接到HTTPS过去,是的就这样简单,然后通过COOKIE记录,就可以在访问的时候进行判断。这样的处理应该是不会影响到搜索引擎的。


$is_ssl = function() {
    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;
};
if(!$is_ssl()){
    if(isset($_COOKIE['wp_ssl']) && $_COOKIE['wp_ssl'] == "yes"){
        header("Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
        exit;
    }
}else{
    define('WP_HOME', "https://".$_SERVER['HTTP_HOST']);
    define('WP_SITEURL', WP_HOME);
}
unset($is_ssl);

  这段代码同样可以用来实现多域名网站,当然在我这里是不可能啦。使用了一个闭包,小小的判断一下然后删除。

  一切就绪,就等一部分人慢慢切换到HTTPS上来,最后在提交评论的地方强制HTTPS设置了,会有点小坑,嘿嘿!

31条评论在“博客开始全站支持HTTPS”

写下你最简单的想法