CodeIgniter 3.0 + PHP7.2.3(LAMPP)中redirect()函数失效问题
解决CodeIgniter 3中redirect()函数无法正常工作的问题
结合你提供的环境(LAMPP服务器、PHP7.2.3、CodeIgniter 3.0)和配置代码,我整理了几个针对性的排查与解决方向:
1. 先确认base_url的正确配置
CodeIgniter 3.0开始要求必须明确设置base_url,否则site_url()和redirect()会出现异常。打开application/config/config.php,检查并修改:
$config['base_url'] = 'http://localhost/你的项目目录/'; // 替换成你实际的项目访问路径
2. 优化redirect的调用写法
你当前的写法redirect(site_url().'dashboard/index');有点冗余,框架的redirect()函数可以直接接收路由路径,改成下面的规范写法试试:
redirect('dashboard/index');
这种写法更贴合框架逻辑,能避免不必要的URL拼接问题。
3. 排查是否存在"提前输出"
redirect()依赖PHP的header()函数,而header()必须在**任何输出(包括空格、HTML标签、echo/print内容)**之前执行。请检查:
- 控制器、模型、视图文件的开头/结尾有没有多余的空格或空行
- 确保已经完全删除之前测试用的
echo、print_r和die;代码(哪怕是注释掉的输出内容也可能有影响) - 检查
auth->login()方法内部有没有意外的调试输出(比如var_dump、echo)
4. 开启输出缓冲作为临时补救
如果暂时找不到提前输出的源头,可以先开启输出缓冲应急:
- 在
config.php中设置:
$config['compress_output'] = TRUE;
- 或者在项目根目录的
index.php顶部添加:
ob_start();
不过还是优先建议排查并消除提前输出的问题,这是更规范的做法。
5. 验证Session是否正常运行
你的登录逻辑依赖Session,而redirect()默认会用到Session传递flash数据。检查config.php的Session配置:
$config['sess_driver'] = 'files'; $config['sess_save_path'] = APPPATH.'sessions/'; // 确保这个目录存在且有读写权限 $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200;
同时确认autoload.php已经加载Session库:
$autoload['libraries'] = array('session');
Session初始化失败也会导致redirect失效。
6. 尝试强制刷新跳转
如果以上方法都没用,可以试试强制用HTTP刷新头跳转:
redirect('dashboard/index', 'refresh');
这种方式会绕过框架默认的跳转逻辑,直接发送刷新指令给浏览器。
内容的提问来源于stack exchange,提问作者Salman Quader
相关产品推荐
相关产品推荐

