轻松了解各种云产品、服务及动态、提供各种云服务。

DISCUZ X3.4全站HTTPS

14
文章目录
  1. 解决步骤
  2. discuz 3.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返回数值。
来源:本文由云小秘原创撰写,欢迎分享本文,转载请保留出处和链接!

抢沙发

昵称*

邮箱*

网址