直接结论:环境检测不过,90%是environment没设对、.env文件没生效或php版本/扩展缺失;白屏因ci4默认静默失败,需设为development模式并确保php≥8.1、启用mbstring/intl/curl/json/xml扩展、baseurl正确、mod_rewrite启用且documentroot指向public目录。

直接结论:环境检测不过,90% 是 ENVIRONMENT 没设对、.env 文件没生效,或 PHP 版本/扩展缺失——不是框架有问题,而是 CI4 的“静默失败”机制在起作用。
为什么访问首页只白屏,不报错也不显示欢迎页
CI4 默认把错误全关掉,除非你明确告诉它“我在开发”。白屏不是卡死,是故意不输出任何东西。
- 打开项目根目录下的
index.php,找到第 56 行左右的define('ENVIRONMENT', 'production');,把它改成define('ENVIRONMENT', 'development'); - 确认项目根目录下有
.env文件(不是.env.example),且内容里有CI_ENVIRONMENT = development - 如果用了
spark serve启动,它会自动读.env;但 Apache/Nginx 下必须确保 Web 服务器用户(如 www-data)有读取.env的权限,且文件无 BOM 头
PHP 版本和必需扩展是否真达标
CI4.5+ 强制要求 PHP ≥ 8.1,且必须启用 mbstring、intl、curl、json 和 xml。仅看 phpinfo() 不够,得实测加载。
- 运行
php -v,确认输出是PHP 8.1.x或更高,不是8.0.x(CI4.5 起拒绝 8.0) - 执行
php -m | grep -E "mbstring|intl|curl",缺任何一个都可能让App类无法实例化,导致Class 'CodeIgniter\CodeIgniter' not found - XAMPP 8.0.30 自带 PHP 8.0.30,不满足 CI4.5+,必须升级到 XAMPP 8.2+ 或单独装 PHP 8.1+
baseURL 配置错误导致路由和静态资源全挂
app.baseURL 不只是影响链接生成,它还参与路径解析、缓存写入、日志路径拼接——设错会导致 WRITEPATH 指向不存在目录,后续所有操作静默失败。
- 检查
.env中app.baseURL是否以/结尾,例如http://localhost/myproject/,不能是http://localhost/myproject - 若用
spark serve,它会校验app.baseURL是否匹配当前监听地址,不匹配就报 “Base URL does not match”,此时要么改.env,要么加--host 127.0.0.1 --port 8080显式指定 - Apache 下若把整个项目放
htdocs/myproject/,则app.baseURL必须是完整路径;若用虚拟主机指向myproject/public/,则 baseURL 就该是http://myapp.local/
mod_rewrite 未启用或 public 目录未设为 Web 根目录
这两项任一缺失,请求根本进不了 CI4 的入口逻辑,index.php 都不会被执行——所以你看不到任何错误,只有 404 或白屏。
- Apache 用户:确认
httpd.conf中LoadModule rewrite_module modules/mod_rewrite.so已取消注释,且对应<directory></directory>区块中AllowOverride All已设置 - 必须把 Web 服务器 DocumentRoot 指向
your_project/public/,不是项目根目录。直接访问http://localhost/myproject/public/index.php是错的,会导致APPPATH解析失败 - 验证方式:在
public/下放一个test.php,内容为<?php phpinfo(); ?>,能打开说明路径正确;再删掉它,访问http://localhost/应该触发 CI4 的欢迎页
最常被忽略的是 .env 文件权限和 BOM 头——Windows 记事本保存的 .env 极易带 BOM,CI4 读取时直接解析失败,连 CI_ENVIRONMENT 都拿不到,退回到 production 模式,然后彻底静默。











