黑帽联盟
标题: Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效) [打印本页]
作者: 定位 时间: 2023-8-3 17:42
标题: Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效)
Discuz! 在 X3 之后才内建支援 https 协定
因为不想大幅度升级,所以决定以修改的方式让 X2.5 版能支援 https 协定
花了不少时间追原始码,初步修改后大致上可以同时使用 http 和 https 两种协定进入论坛
使用 https 进入论坛时,论坛画面、主题列表 都没问题
但是点入文章后,很容易就被浏览器提醒 连线可能有安全漏洞
原因是论坛本就开放式架构,任何人张贴连外的连结或图片或其他任何资源
只要连外不是使用 https 连结的,都会被视为不安全的连线
所以多数的论坛都维持使用 http 协定,顶多就是登入时使用 https 而已
既然已经修改了,就纪录一下修改的方法
先配置好Web服务器,设置好SSL证书
后台设置(把http设置成https)
全局-站点信息-网站 URL
站长-UCenter设置-UCenter 访问地址
UCenter-应用管理-应用的主 URL
修改程序
文件 source/function/function_core.php
找到$content = output_replace($content);
在下面添加- $content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);
复制代码 如果有多个二级域名- $content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);
复制代码 注释掉下面的代码- if(!defined('IN_MOBILE') && !defined('IN_ARCHIVER')) {
- $tipsService = Cloud::loadClass('Service_DiscuzTips');
- $tipsService->show();
- }
复制代码 要修改的档案如下
档案:source/class/discuz/discuz_application.php
搜寻 $_G = array( (约110行),然后修改成如下- global $_G;
- $_G = array(
- <font color="#ff0000"> 'req_scheme' => array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
- : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http'),</font>
- 'uid' => 0,
- 'username' => '',
- 'adminid' => 0,
- 'groupid' => 1,
复制代码 接着修改以下6个地方- # 搜寻
- $_G['siteurl'] = dhtmlspecialchars('http://'.$_SERVER['HTTP_HOST'].$sitepath.'/');
- # 修改成
- $_G['siteurl'] = dhtmlspecialchars(<font color="#ff0000">$_G['req_scheme'].'://'</font>.$_SERVER['HTTP_HOST'].$sitepath.'/');
- # 搜寻
- setglobal('currenturl_encode', base64_encode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));
- # 修改成
- setglobal('currenturl_encode', base64_encode(<font color="#ff0000">$this->var['req_scheme'].'://'</font>.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']));
- # 搜寻
- dheader("Location:http://".$this->var['setting']['domain']['app']['default'].$_SERVER['REQUEST_URI']);
- # 修改成
- dheader("Location:<font color="#ff0000">'. $this->var['req_scheme'] .'://"</font>.$this->var['setting']['domain']['app']['default'].$_SERVER['REQUEST_URI']);
- # 搜寻
- $mobileurl = 'http://'.$this->var['setting']['domain']['app']['mobile'];
- # 修改成
- $mobileurl = <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['mobile'];
- # 搜寻
- $mobileurl = 'http://'.$this->var['setting']['domain']['app']['forum'].'?mobile=yes';
- # 修改成
- $mobileurl = <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['forum'].'?mobile=yes';
- # 搜寻
- $this->var['setting']['mobile']['nomobileurl'] = ($this->var['setting']['domain']['app']['forum'] ? 'http://'.$this->var['setting']['domain']['app']['forum'].'/' : $this->var['siteurl']).$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=no';
- # 修改成
- $this->var['setting']['mobile']['nomobileurl'] = ($this->var['setting']['domain']['app']['forum'] ? <font color="#ff0000">$this->var['req_scheme'].'://'</font>.$this->var['setting']['domain']['app']['forum'].'/' : $this->var['siteurl']).$this->var['basefilename'].($query_sting_tmp ? '?'.$query_sting_tmp.'&' : '?').'mobile=no';
复制代码 档案:source/function/function_core.php
搜寻: $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;
修改成下面这样- static $staticavatar;
- if($staticavatar === null) {
- $staticavatar = $_G['setting']['avatarmethod'];
- }
- $ucenterurl = empty($ucenterurl) ? $_G['setting']['ucenterurl'] : $ucenterurl;
- <font color="#ff0000">if( $_G['req_scheme'] == 'https' ) {
- $ucenterurl = preg_replace("/http\:/s", "https:", $ucenterurl);
- }</font>
- $size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
- $uid = abs(intval($uid));
复制代码 档案: uc_server/admin.php
在档案开头附近可以看到 define('IN_UC', TRUE); 修改如下- $mtime = explode(' ', microtime());
- $starttime = $mtime[1] + $mtime[0];
- <font color="#ff0000">$req_scheme = array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
- : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http');</font>
- define('IN_UC', TRUE);
- define('UC_ROOT', substr(__FILE__, 0, -9));
- define('UC_API', strtolower($req_scheme.'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
- define('UC_DATADIR', UC_ROOT.'data/');
- define('UC_DATAURL', UC_API.'/data');
复制代码 档案: uc_server/avatar.php
在档案开头可以看到 error_reporting(0); 修改如下- error_reporting(0);
- <font color="#ff0000">$req_scheme = array_key_exists('REQUEST_SCHEME', $_SERVER) ? $_SERVER['REQUEST_SCHEME']
- : ( $_SERVER['SERVER_PORT'] == 443 || (array_key_exists('HTTPS', $_SERVER) && strtolower($_SERVER['HTTPS']) != 'off') ? 'https' : 'http');
- define('UC_API', strtolower($req_scheme.'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
- </font>
- $uid = isset($_GET['uid']) ? $_GET['uid'] : 0;
- $size = isset($_GET['size']) ? $_GET['size'] : '';
复制代码 到这里就设置完成了,唯一的不足是下面这个地方:
有知道怎么处理的,回复一下,万分感谢!!!
转载自:https://ezbox.idv.tw/71/discuz-x25-https/和https://t2.re/archives/565/
作者: 定位 时间: 2023-8-28 14:45
标题: 按照这里的方法去操作,亲测有效
关于高级模式链接的问题,已解决。2种解决方式如下。第1种:登录后台:点击全局--域名设置--应用域名,删除默认域名里面的链接。这种方式,有时候会导致多入口的问题,前台会出现css无法加载,直接出现ip链接,所以不建议。第二种:修改模板的方式,文件为:template/default/forum/post_infloat.htm,找到第87行,直接添加https://bbs.cnblackhat.com(这里修改成你的域名),如图所示:
还有就是论坛里面链接后面都带有443端口的问题,修改文件source/class/discuz/discuz_application.php,修改182行,$_SERVER['SERVER_PORT'] == '80' 修改为 $_SERVER['SERVER_PORT'] == '443'
最后更新模板即可
更新一下Discuz! X2.5全站启用https,这里只需要按照这条评论回复的操作即可,剩下的操作如下:
先配置好Web服务器,设置好SSL证书
后台设置
全局-站点信息-网站 URL
站长-UCenter设置-UCenter 访问地址
UCenter-应用管理-应用的主 URL
修改程序
文件 source/class/discuz/discuz_application.php
替换http://为https://
文件 source/function/function_core.php
找到$content = output_replace($content);
在下面添加
$content = str_replace('http://www.xxx.com','https://www.xxx.com',$content);
如果有多个二级域名
$content = preg_replace('http://(.*?)xxx.com','https://\1xxx.com',$content);
注释掉下面的代码
- if(!defined('IN_MOBILE') && !defined('IN_ARCHIVER')) {
- $tipsService = Cloud::loadClass('Service_DiscuzTips');
- $tipsService->show();
- }
复制代码
欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) |
Powered by Discuz! X2.5 |