You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级服务器后CodeIgniter 2.2.0的HTTPS跳转异常问题求助

解决CodeIgniter 2.2.0在PHP7.4+HTTPS环境下前台页面302跳转到HTTP的问题

核心原因

CodeIgniter 2.2.0是2014年的旧版本,原生没有适配HTTPS环境的自动识别逻辑,加上PHP7.4的兼容性差异,导致框架生成URL时默认使用HTTP,触发302跳转;若.htaccess配置重复强制HTTPS,就会引发重定向循环。

具体修复步骤

1. 强制设置HTTPS的Base URL

打开application/config/config.php,不要依赖框架自动检测,直接指定HTTPS的base_url:

$config['base_url'] = 'https://你的域名/';

同时确保$config['uri_protocol']设置正确,推荐用AUTO或REQUEST_URI:

$config['uri_protocol'] = 'REQUEST_URI';

2. 修复框架的HTTPS识别逻辑

CI2默认的is_https()函数(位于system/core/Input.php)仅检测$_SERVER['HTTPS'] === 'on',但部分服务器(如带反向代理的主机)会通过HTTP_X_FORWARDED_PROTO传递HTTPS标识,需要修改这个函数:

public function is_https()
{
    if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) === 'on')
    {
        return TRUE;
    }
    elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https')
    {
        return TRUE;
    }
    elseif (isset($_SERVER['HTTP_X_FORWARDED_SSL']) && strtolower($_SERVER['HTTP_X_FORWARDED_SSL']) === 'on')
    {
        return TRUE;
    }
    return FALSE;
}

3. 修正.htaccess配置(避免重定向循环)

使用以下配置,先强制HTTPS再处理CI的URL重写,确保逻辑不冲突:

RewriteEngine On

# 仅当非HTTPS时强制跳转,避免循环
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# CodeIgniter URL重写(移除index.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

注意:不要在框架内部(如控制器)和.htaccess同时做HTTPS强制跳转,否则会触发“重定向过多”。

4. 检查框架重定向函数的URL生成

CI2的redirect()函数依赖site_url()生成地址,如果base_url未正确设置HTTPS,会生成HTTP链接。可以修改system/helpers/url_helper.php里的site_url()函数,强制替换为HTTPS:

function site_url($uri = '')
{
    $CI =& get_instance();
    $url = $CI->config->site_url($uri);
    // 强制替换为HTTPS
    return str_replace('http://', 'https://', $url);
}

5. 排查PHP7.4兼容性隐性错误

开启CI的日志功能,检查是否有静默错误:
在application/config/config.php中设置:

$config['log_threshold'] = 2; // 记录严重错误和运行时错误
$config['log_path'] = './application/logs/';

查看application/logs下的日志,重点排查:

  • create_function()相关错误(PHP7.2+已移除该函数,CI2部分代码使用了它)
  • 未定义的变量、数组索引
  • 过时的语法(如$this->some_function(&$param)的引用传递)
    这些隐性错误可能导致框架异常跳转,需要手动替换或修复相关代码。

总结

优先通过强制设置HTTPS的base_url和修复框架HTTPS识别逻辑解决跳转问题,再配合正确的.htaccess配置避免循环,最后通过日志排查PHP7.4的兼容性隐性错误,即可解决CI2.2.0在新环境下的HTTPS跳转问题。

内容的提问来源于stack exchange,提问作者rob - not a robber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:52:52