请选择 进入手机版 | 继续访问电脑版

为学日益

 找回密码
 立即注册
为学日益 专栏文章 查看内容

discuz X3.4 同时启用https和http

2019-8-5 20:51| 发布者: finer| 查看: 1133| 评论: 0

摘要: 由于用的是百度bch,运行在nginx下 首先按网上教程修改 后台 >全局 > 站点 URL ,改为 https 开头的 后台 > 站长 > UCenter 设置 > UCenter 访问地址,修改为…… ...
由于用的是百度bch,运行在nginx下
首先按网上教程修改
后台 >全局 > 站点 URL ,改为 https 开头的
后台 > 站长 > UCenter 设置 > UCenter 访问地址,修改为 https 开头的
UCenter 后台 > 应用管理 > 应用的主 URL ,修改为 https 开头

接着修改source\class\discuz目录内的 discuz_application.php
将第187行修改为:
$_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
删除第188行,
将第189行修改为:
$_G['siteurl'] = dhtmlspecialchars('http'.($_G['isHTTPS'] ? 's' : '').'://'.$_SERVER['HTTP_HOST'].$sitepath.'/');

然后,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'], '/'))));
修改为:
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'], '/'))));

后台缓存清除,浏览器缓存清除,测试发现进入http排版混乱,是因为css文件还是http请求,被浏览器拒绝了。
想来是因为php的检测https代码与nginx不兼容。
于是修改discuz_application.php
$_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
$_SERVER['HTTPS']='on';
$_G['isHTTPS'] = true;
重新清除缓存后测试https开启成功。
但这样处理http域名进入后排版混乱,因为用https来请求没有证书的http域名,css之类的内容又被浏览器当做不安全而拒绝了。
于是继续修改,刚才这两行加个判断,发现是http的域名,返回false
if (strtolower($_SERVER['HTTP_HOST'])=='xxx.xxx.cn'){
$_G['isHTTPS'] = false;
} else {
$_SERVER['HTTPS']='on';
$_G['isHTTPS'] = true;
}
经测试,https和http都访问正常,虽然在http模式下也有一些内容会用https请求,但不影响效果。
然后登陆论坛,发现https又提示不安全了,
uc_server/avatar.php 内的
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'], '/'))));
修改为
define('UC_API', strtolower('https://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
问题解决。

注意:后台清空重建缓存要进入https模式,否则如果用http域名登陆重建的缓存,会有很多http请求,导致https提示不安全。


路过

雷人

握手

鲜花

鸡蛋
上一篇:测试文章发布下一篇:开贴感言

最新评论

为学日益  浙ICP备19024182号   浙公网安备 33078202001030号

GMT+8, 2020-12-5 21:54 , Processed in 0.057842 second(s), 15 queries .

Powered X3.4

© 2001-2017

返回顶部