网站优化技术

Discuz、ECSHOP、帝国CMS部署HTTPS(SSL)后会员登录故障解决方案

发布于:
最后更新时间:
热度:372

一、适用环境说明

本技术文档专针对部署于西部数码港台虚拟主机或亚数云主机(香港IP)的Discuz、ECSHOP、帝国CMS系统在启用SSL证书并配置301永久跳转后,出现的会员无法登录、后台访问异常等问题提供解决方案。需特别说明,此类主机环境在HTTPS判断机制上存在特殊性,默认的`$_SERVER['HTTPS']`变量支持不足,需通过`$_SERVER['HTTP_FROM_HTTPS']`变量进行兼容性处理,此修改逻辑亦适用于其他基于PHP开发的Web程序。

二、Discuz系统HTTPS登录故障修复

Discuz系统在部署HTTPS后,后台无法登录的核心原因在于其采用`$_SERVER['HTTPS']`变量进行HTTPS协议状态判断,而目标主机环境对该变量的支持存在局限,导致系统无法正确识别HTTPS连接状态,进而影响用户登录认证及UC通信模块。

修复步骤:

1. 核心判断逻辑修改

文件路径:`source/class/discuz/discuz_application.php`(约188行)

原代码:

```php

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

```

修改为:

```php

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

```

此修改将HTTPS判断依据切换至主机环境支持的`HTTP_FROM_HTTPS`变量,确保系统正确识别HTTPS状态。

2. UC通信协议适配

文件路径:`uc_server/avatar.php`(约14行)

原代码:

```php

define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

```

修改为:

```php

define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_FROM_HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

```

此处增加`SERVER_PORT`与`HTTP_FROM_HTTPS`的双重判断,确保在301跳转场景下UC通信模块仍能正确调用HTTPS协议,避免通信失败。

特别提示:若采用301方式强制HTTP跳转HTTPS,可能导致UC通信模块因协议判断异常而失效,需同步完成上述变量替换操作。

三、ECSHOP系统HTTPS登录故障修复

ECSHOP系统在部署HTTPS后,后台登录失败的原因与Discuz类似,其系统在URL协议判断中依赖`$_SERVER['HTTPS']`变量,而目标主机环境对该变量的支持不足,导致系统生成的登录链接仍为HTTP协议,引发浏览器安全拦截或会话异常。

修复步骤:

文件路径:`includes/cls_ecshop.php`(约154行)

原代码:

```php

return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://';

```

修改为:

```php

return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) || (strtolower($_SERVER['HTTP_FROM_HTTPS']) == 'on') ? 'https://' : 'http://';

```

通过增加`HTTP_FROM_HTTPS`变量的判断条件,确保在主机环境特殊情况下,系统仍能正确生成HTTPS协议的登录链接,解决后台无法登录问题。

四、帝国CMS系统HTTPS登录故障修复

帝国CMS系统在部署HTTPS后,可能出现后台登录页面空白或登录异常问题,主要因系统在域名协议识别中未适配主机环境的HTTPS判断机制,导致页面生成时协议类型错误。

修复步骤:

1. 7.2及以下版本修复

文件路径:`e/class/connect.php`

修改`eReturnDomain()`函数(约第5-15行):

```php

function eReturnDomain(){

$domain=RepPostStr($_SERVER['HTTP_HOST'],1);

if(empty($domain)){

return '';

}

// return 'http://'.$domain; // 注释原代码,替换为以下逻辑

$httptype = isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off') || (strtolower($_SERVER['HTTP_FROM_HTTPS']) == 'on') ? 'https://' : 'http://';

return $httptype.$domain;

}

```

同理修改`FWeReturnDomain()`函数(约第20-30行),替换逻辑与`eReturnDomain()`一致,确保全站域名协议识别正确。

2. 7.5及以上版本修复

配置文件路径:`e/config/config.php`,确保`'httptype' => 0`(开启自动协议识别);

文件路径:`e/class/connect.php`,修改`eCheckUseHttps()`函数(约第5-15行):

```php

function eCheckUseHttps(){

// if($_SERVER['HTTPS']&&strtolower($_SERVER['HTTPS'])!='off') // 注释原代码,替换为以下逻辑

if (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off') || (strtolower($_SERVER['HTTP_FROM_HTTPS']) == 'on'))

{

return 1;

}

else

{

return 0;

}

}

```

此修改确保系统在检测HTTPS状态时兼容主机环境的变量特性,解决登录页面空白问题。

五、总结

本文针对Discuz、ECSHOP、帝国CMS在西部数码特定主机环境下部署HTTPS后的登录故障,提供了基于`HTTP_FROM_HTTPS`变量的核心修复方案。通过修改各系统的HTTPS判断逻辑,可确保在301跳转场景下协议识别准确,恢复会员登录及后台管理功能。操作前需备份原文件,修改后测试全站HTTPS访问正常性。

最新资讯

为您推荐

联系上海网站优化公司

上海网站优化公司QQ
上海网站优化公司微信
添加微信