找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 拇指 mztk
查看: 3252|回复: 1

DZ论坛http转https

[复制链接]

5

主题

1

回帖

94

积分

实习版主

积分
94
发表于 2019-11-16 20:57:51 | 显示全部楼层 |阅读模式

虽然DiscuzX3.2、X3.3、 X3.4已经针对https做了优化,

第一步:

全局 > 站点信息 > 网站 URL,修改为https://www.0co.cn/的格式


第二步:修成Discuz适配https

如果你的Web服务是Apache,请忽略这一步,Nginx请继续看:

Discuz判断网站是否启动SSL是采用 $_SERVER[‘HTTPS’] 的方式,此方法不支持Nginx(nginx+php-fpm),需要先做一些修改,让Discuz使用 $_SERVER[‘SERVER_PORT’]来判断网站是否启用SSL。

source/class/discuz/discuz_application.php(约第187行处):

查找:

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

[color=rgb(143, 195, 31) !important]复制代码

修改为:
  • $_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

[color=rgb(143, 195, 31) !important]复制代码

uc_server/avatar.php (约第13行处):

查找:

  • define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

[color=rgb(143, 195, 31) !important]复制代码

修改为:

  • define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

[color=rgb(143, 195, 31) !important]复制代码

懒人包下载:【适用于:Discuz_X3.2_SC_GBK【2016-06-01】】或Discuz! X3.3更新版本。


第三步:Ucenter通信使用https方式

后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

UCenter后台 > 应用管理 > 应用的主URL,修改为https开头。


第五步:解决浏览器提示“加载不安全的脚本”


这个提示是因为这个脚本使用http方式加载的原因:


[color=rgb(143, 195, 31) !important]复制代码

此脚本的功能是检查补丁和安全通知,用处不大,果断删除。


删除方法:编辑模板的footer.htm,在最后找到并删掉:

  • <!–{eval output();}–>

[color=rgb(143, 195, 31) !important]复制代码

即可。


第六步:解决QQ互联的问题

首先升级QQ互联插件,最低版本要求是 1.18.2,如果升级后依然不行,需要修改回调 URL 为非 HTTPS 的:

找到:

source/plugin/qqconnect/connect.class.php 大约41行

在common_base() 函数里面,将 $_G[‘siteurl’] 直接硬编码为 你的http的URL ,首先修改callback_url,如果不行,将所有包含connect.php 的 URL 全部替换。


第七步:将论坛帖子中网站的URL改成https格式的。

会员在发帖的过程中,很可能调用了本站别处的帖子或连接,而这个链接肯定是http的,所以需要将这些链接全部修改成https格式的:


执行SQL语句,可以在DZ后台,或者phpmyadmin中都可以:


[color=rgb(143, 195, 31) !important]复制代码


有会员反馈以上SQL升级语句报错:

如果存在该问题则使用以下SQL语句即可:(注意符号标点~)


[color=rgb(143, 195, 31) !important]复制代码



回复

使用道具 举报

5

主题

1

回帖

94

积分

实习版主

积分
94
 楼主| 发表于 2019-11-16 20:58:33 | 显示全部楼层

最后,Nginx开启强制https跳转,在nginx虚拟主机配置文件中,在Server字段增加:

  • if ($server_port = 80) {
  • return 301 https://$server_name$request_uri;
  • }
  • if ($scheme = http) {
  • return 301 https://$server_name$request_uri;
  • }

[color=rgb(143, 195, 31) !important]复制代码

注意:这里需要根据自己的服务器环境配置,不正确或者有问题的配置可能导致Ucenter通信失败,Apache需要在.htaccess中添加规则。


Apache .htaccess规则:

  • 等待添加

[color=rgb(143, 195, 31) !important]复制代码

修改过后,更新缓存,发现大多数链接都变成了https.
2.2、后台设置

在后台还有一些设置,可能会干扰https的使用

后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

UCenter后台 > 应用管理 > 应用的主URL,修改为https开头

另外在 后台 > 全局 > 域名设置 中的一些设置也可能使https失效,如果进行了之前的几步还是无法启用,可以暂时删除这里的设置试试。


3、清理缓存

设置完成之后,需要清理缓存,使设置生效。

清理缓存及内存缓存,如果设置了帖子缓存,还需清理数据库内的缓存(清空相应cache数据库,或者静等缓存失效)

至此,Discuz https启用成功,当然,在访问某些页面的时候,可能锁会打上叉。因为页面中加载了其他http内容。可能是统计代码、QQ分享代码、QQ秀头像等,这部分服务暂时没有提供https协议,因而无法启用。只能等待Discuz进一步支持https。



到此,你应该可以看到绿色的https标志了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|再加计算机 ( 鲁ICP备19060125号-10|鲁公网安备37028102001711号 )

GMT+8, 2026-9-11 18:11 , Processed in 0.114106 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表