定位 发表于 2023-8-3 17:42:05

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 + $mtime;

<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:16

按照这里的方法去操作,亲测有效

关于高级模式链接的问题,已解决。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();
    }
页: [1]
查看完整版本: Discuz! X2.5全站启用https(按照评论回复的那条操作,亲测有效)