DISCUZ X3.4全站HTTPS

解决步骤

1、修改source/class/discuz/discuz_application.php(第187行)将

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

修改为:
$_G['isHTTPS'] = true;

2、修改uc_server/avatar.php(就在头几行)将

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'], '/'))));

3、修改/template/default/common/header.htm

将http://全部查找替换为:https://(一共5处)

4、 找到 uc_server/admin.php (约第13行处)

define('UC_API', strtolower((isset($_SERVER['HTTPS']) && $_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'], '/'))));

5、后台 – 全局 – 站点信息 – 网站 URL:将http://改成https://网址

6、后台 – 站长 – UCenter设置 – UCenter 访问地址改成https://网址

7、后台 – UCenter(如果不能正常访问可以在新窗口打开,也可以直接访问UC地址) – 应用管理 – 点右边的编辑 – 应用的主URL改成https://网址

8、后台 – 工具 – 更新缓存

9、后台 – 界面 – 风格,点击“更新CSS缓存”按钮

10、 修改数据库

update pre_portal_article_content set content = replace(message, 'http://域名/data/attachment', 'https://域名/data/attachment');

discuz 3.4 开启https了,强制上传头像无法使用(一直提示需要上传头像)的问题

开启了强制头像上传,即便上传了头像,依旧说没有权限发表,请上传头像。

下面的是网络上的解决方法,但是使用了下面的方法修改后,点击修改头像会出现两次提示上传失败,点击确定后才能上传头像,希望能解决这个bug。

主要原因在于和uc_server的通讯,在uc_server里面显示通讯成功,但这并不一定准确(里面原因非常复杂),而且我enable了https,所以原因更复杂了。

首先,先做uc的https更新:解决discuz上HTTPS后UCENTER出现通讯失败

然后问题就出在了头像获取上,在uc_client/client.php中,找到

path=matches['path'] ? matches[′path′].(matches['query'] ? '?'.$matches['query'] : '') : '/'; 下面增加:

matches[′port′]=!empty(matches['port'])&&scheme==′https′?matches['port'] : 443; 然后找到:

if(!fp=@fsocketopen((ip ? ip:host), port,errno, errstr,timeout)) { 在修改为:

           if($port=='443'){
            $temp = 'ssl://';
    }else{
            $temp = 'http://';
    }
    if(!$fp = @fsocketopen($temp.($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) {
至此应该修复了该问题了,如果还没修复,尝试以下方法:

在function uc_check_avatar中找到

res=ucfopen2(url, 500000, ”, ”, TRUE, UC_IP, 20); 修改为:

res=trim(ucfopen2(UCAPI."/avatar.php?uid=uid&check_file_exists=1")); 原本的call很不稳定,有时候返回不出1,新的这个直接打开url返回数值。
本文来自网络,不代表云小秘立场,转载请注明出处:https://www.cloudmmu.com/308.html

作者: 欧邦

折腾不休,奋斗不止

发表评论

联系我们

联系我们

15877997995

在线咨询: QQ交谈

邮箱: oubang@live.cn

工作时间:周一至周五,9:00-21:00,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部