分享个网站升级HTTPS后遇到的问题,之前用的服务器不能升级HTTPS,虽然申请了证书但一直没用上,好歹证书是免费的那种,所以就暂时放一边了。 前几天突然想试试这个服务器能不能上HTTPS,在后台直接开启了发现完全没问题。
但突然想到我是用的第三方评论系统(来必力),一般来说第三方评论系统是对文章链接进行获取,然后以此为唯一标识区分每个文章下面的评论的。开始我以为不会有问题,因为只是协议部分变化,谁成想这个第三方评论取的是整个URL,包括协议部分的HTTPS。开始我是这么认为的,因为升级了HTTPS后以前的评论就没了。
但代码是这样的:
<!-- 来必力City版安装代码 -->
<div id="lv-container" data-id="city" data-uid="*************">
<script type="text/javascript">
// 这部分就是获取链接的代码 👇
var refer = "<?=get_permalink($id);?>".replace("http://","");
(function(d, s) {
var j, e = d.getElementsByTagName(s)[0];
if (typeof LivereTower === 'function') { return; }
j = d.createElement(s);
j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
j.async = true;
e.parentNode.insertBefore(j, e);
})(document, 'script');
</script>
<noscript>为正常使用来必力评论功能请激活JavaScript</noscript>
</div>
<!-- City版安装代码已完成 -->
大致看了一下发现,原来不是我想的取整个URL,而是获取URL后把“http://”部分删掉,再作为唯一标识使用,这样以来就好说了,因为replace这个函数可以用正则表达式,如果想让这个第三方评论系统兼容http和https,非常简单。
只要把那句代码改成下面这样:
var refer = "<?=get_permalink($id);?>".replace(/https?:\/\//,"");
在正则表达式的意思就是,匹配“https://”这个字符串,而“s”后面的“?”代表“s”字段可以是0或1个。也就是说“http://”和“https://”都可以匹配到,然后将其替换为空(也就是删除),再作为唯一标识。
唯一标识跟之前一样,那自然评论就显示出来了。就这样解决了一个非常简单的问题,愉快的水了一篇非技术文章,233。