Discuz论坛使用SSL后完美解决https加载错位的问题

CSS加载失败,会导致网页错位。如果浏览器提示不安全,说明当前网页内含有非https的资源。如某个图片是http的。
网上很多方法,有的有效,但并不完整。有的没有效。有的比较麻烦。
比如nginx配置文件中将http请求强制301跳转到https。
这样一跳转,所有的CSS样式均会在https模式下了。
由于WDCP挺神奇的,动来动去,很容易就崩了。
所以就不直接在服务器上操作了。

直接修改网站文件,不会影响整个服务器和其它站点。

下面方法一步步修改,最后完美实现全站HTTPS,没有任何错误。

1、后台-全局-站点URL。改为HTTPS。
2、后台-站长-ucenter设置。改为HTTPS。
3、后台-ucenter-应用通信。改为HTTPS。

更新缓存。

4、修改模板文件:header.htm,搜索http全部替换为https。

更新缓存。

5、修改/source/function/function_core.php

搜索:

$content = output_replace($content);

 

底下加入:

$content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);

 

更新缓存。

6、修改/source/class/discuz/discuz_application.php

搜索:

$_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : flase;

 

改为:

$_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'on') ? true : true;

 

7、改到这。打开论坛首页,发现https下网页不再有错乱,都正常了。但是浏览器上方依然显示“不安全”。
说明还有URL是HTTP。

按F12可以看到哪些URL有问题。

其中有一个JS连接是

http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1

搜索footer.htm最底下可以看到是<!–{eval output();}–>调用的。(不要直接修改footer.htm会影响伪静态输出。)

找到:source/plugin/manyou/Service/DiscuzTips.php

删除以下代码:

$jsCode = <<<EOF
<div id="discuz_tips" style="display:none;"></div>
<script type="text/javascript">
var tipsinfo = '$sId|$version|$cloudApi|$isfounder|$adminId|$openId|$uid|$groupId|$ts|$sig|$clientVersion';
</script>
<script src="http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1" type="text/javascript" charset="UTF-8"></script>
EOF;
echo $jsCode;

 

 

去掉后对论坛有一定影响,比如:收不到 Discuz! 的安全通知了,也收不到 Discuz! 的补丁通知了,还收不到防水墙的过滤通知了。我觉得这个基本可以忽视。

8、最后一步。审查元素可以发现,很多css里要加载的图片都是相对路径,所以网页加载时它不会自己加https,而是默认的http,所以主要是CSS和JS里要改成绝对路径。

修改header_common.htmheader_common.php。如果当前模板目录没有,则是调用的默认文件,就到默认模板目录里面修改)里面有一行代码

搜索:

<base href="{$_G['siteurl']}" />

改为:

<base href="https://www.xxx.com" />

更新缓存。

这时已经HTTPS已经完全绿标了。完成。

Join the ConversationLeave a reply

Your email address will not be published. Required fields are marked *

Comment*

Name*

Website