最新消息:把Logo换了一下,虽然丑了点,但至少完全是自己的设计

让WordPress下的多说完美支持HTTPS

10.软件使用 宇托 373浏览 暂无评论

最新版多说社会化评论框 1.2说是支持HTTPS,但还是不完美的。对于头像它还是没有支持HTTPS。所以使用多说时会有HTTPS警告。

看了一下多说的代码,在网上看了一些解决方案。觉得加一个PHP代理就可以实现头像HTTPS了。

其方案如下:

  1. 把多说的核心代码embed.js本地化。
  2. 修改embed.js的头像URL,通过PHP代理来取得头像

修改方法:

一,先新建一个PHP代理文件proxy.php,放到多说插件目录,文件内容如下

PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$image = curl_exec($ch);
header('Content-Type: ' . curl_getinfo($ch, CURLINFO_CONTENT_TYPE));
echo $image;
curl_close($ch);

二,本地化embed.js

从多说网站http://static.duoshuo.com/embed.js下载embed.js,并放到多说插件目录。
因为embed.js是压缩过的,可以在网上找一下JavaScript的代码格式化工具,把embed.js格式化一下。

三,修改多说目录下的Wordpress.php,使其加载本地embed.js

主要是修改appendScripts函数和printScripts函数。我修改后的代码如下:

PHP
<?php
    public function appendScripts(){
        if ($this->_scriptsPrinted)
            return;
        $this->_scriptsPrinted = true;
?>
<script type="text/javascript">
var duoshuoQuery = <?php echo json_encode($this->buildQuery());?>;
var duoshuoHttpsProxyUrl = '<?php echo plugins_url('proxy.php', __FILE__);?>';
duoshuoQuery.sso.login += '&redirect_to=' + encodeURIComponent(window.location.href);
duoshuoQuery.sso.logout += '&redirect_to=' + encodeURIComponent(window.location.href);
</script>
<script type="text/javascript" src="<?php echo plugins_url('embed.js', __FILE__);?>" charset="UTF-8" async="async"></script>
<?php
    }

    /**
     * 在wp_print_scripts 没有执行的时候执行最传统的代码
     */
    public function printScripts(){
        if ($this->_scriptsPrinted)
            return;
        $this->_scriptsPrinted = true;
        ?>
<script type="text/javascript">
var duoshuoQuery = <?php echo json_encode($this->buildQuery());?>;
var duoshuoHttpsProxyUrl = '<?php echo plugins_url('proxy.php', __FILE__);?>';
duoshuoQuery.sso.login += '&redirect_to=' + encodeURIComponent(window.location.href);
duoshuoQuery.sso.logout += '&redirect_to=' + encodeURIComponent(window.location.href);
(function() {
    var ds = document.createElement('script');
    ds.type = 'text/javascript';
    ds.async = true;
    ds.charset = 'UTF-8';
    ds.src = '<?php echo plugins_url('embed.js', __FILE__);?>';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ds);
})();
</script><?php
    }

三,修改embed.js,头像地址通过PHP代理中转

主要是修改avatarUrl函数我修改后的代码如下:

JavaScript
avatarUrl: function(e) {
    if ("https:" !== t.location.protocol) {
        return e.avatar_url || rt.data.default_avatar_url
    } else if (e.avatar_url) {
        return e.avatar_url.replace(/^http\:\/\//, duoshuoHttpsProxyUrl + "?url=http://");
    } else {
        return rt.data.default_avatar_url.replace(/^http\:\/\//, duoshuoHttpsProxyUrl + "?url=http://");
    }
},

四,WS-Security无效化,这个不是必须的

多说用了WS-Security,但很多浏览器和代理服务器都不支持,其禁用方法是:

查找 "WebSocket", 在这个IF语句之前直接加一个return ! 1;

前面四步的修改我已经提交到了GitHub上了,可以直接上GitHub下载。地址如下:

https://github.com/yutuo/duoshuo-wordpress

转载请注明:宇托的狗窝 » 让WordPress下的多说完美支持HTTPS

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址