discuz x3 https部署实战及问题解决

最近部署了几个discuz的https,有新站也有旧站。挺多坑的,在这里总结整理下。

首先是无论新站、老站都要做的:

一、部署https证书(这个不说了,有兴趣搜一下我之前写的文章,有问题留言)

二、Discuz程序支持

其实 Discuz! X3 开始,已经加入了对https的支持,如果你使用https访问论坛,论坛中的链接都会变成https。如果你发现大部分链接都已经使用了https,就代表Discuz已经自动识别了,此时,可以跳过本步,直接进入下一步。

Discuz采用 $_SERVER[‘HTTPS’] 的方式来判断SSL,但是使用nginx无法采用这种方式识别,所以需要对Discuz程序进行一些调整(使用 $_SERVER[‘SERVER_PORT’] 来判断)。

1、打开source/class/discuz/discuz_application.php(约第187行处):

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

修改为:

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

2、打开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'], '/'))));

3、后台设置

在后台还有一些设置,可能会干扰https的使用

a. 后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

b. UCenter后台 > 应用管理 > 应用的主URL,修改为https开头

另外在 后台 > 全局 > 域名设置 中的一些设置也可能使https失效,如果进行了之前的几步还是无法启用,可以暂时删除这里的设置试试。

c.清理缓存,设置完成之后,需要清理缓存,使设置生效。

这些完成之后,如果是新站的话,应该进入全https模式了。如果是旧站,可能还有一些问题,需要根据具体情况,以下是我碰到的问题。

1.  {STYLEIMGDIR}和部分style图片调用链接依旧是http

打开 source/function/cache/cache_styles.php ,查找以下三项:

$cssdata = !preg_match('/^http:\/\//i', $data['styleimgdir']) $cssdata = !preg_match('/^http:\/\//i', $data['imgdir']) $cssdata = !preg_match('/^http:\/\//i', $data['staticurl'])

将其中的 /^http:\/\//i 替换为 /^http/i ,保存覆盖。

2. 管理员登陆出现DiscuzTips的问题

这个可以直接去模板的foot删除,也可以打开 source/plugin/manyou/Service/DiscuzTips.php ,在 echo $jsCode; 前加 // 将其注释掉。

3. 开启https后ucenter通信失败

打开目录 uc_server/model/misc.php 文件;

找到69行(如下图),插入下面代码:

if (substr($url, 0, 5) == 'https')
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if ($post)
    {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    if ($cookie)
    {
        curl_setopt($ch, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    return curl_exec($ch);
}

如果有新的问题会继续更新,欢迎留言提问

看完了?留个评分呗?
[0人评了分,平均: 0/5]

本站原创文章皆遵循“署名-非商业性使用-相同方式共享 3.0 (CC BY-NC-SA 3.0)”。转载请保留以下标注:

原文来源:《discuz x3 https部署实战及问题解决》

发表评论

电子邮件地址不会被公开。

返回顶部