资源加载失败八成是baseurl配置错误或web根目录未指向public/:app.php中$baseurl须为'http://localhost/'(结尾斜杠),.env中app.baseurl优先覆盖,且apache/nginx的document root必须设为项目/public目录。

资源加载失败,八成是 baseURL 配置错误 或 Web 根目录没对齐,不是文件路径写错了,而是框架压根不知道该从哪开始拼 URL。
检查 App.php 中的 baseURL 是否准确
打开 app/Config/App.php,找到 public $baseURL 这一行:
- ✅ 正确写法(本地开发):
public $baseURL = 'http://localhost/';—— 注意结尾有斜杠,且不带子目录 - ❌ 常见错误:
'http://localhost/crm/public/'或'http://localhost/crm/'—— 这会导致 CSS、JS、图片全部 404,因为浏览器按这个前缀去请求,但实际静态资源由public/目录直接提供 - 如果部署在二级目录(如
https://example.com/myapp/),$baseURL必须设为'https://example.com/myapp/',同时确保 Web 服务器 root 指向myapp/public/
确认 Web 服务器根目录指向 public/
CodeIgniter 4 要求 Web 服务器的 document root 必须是 public/ 目录,而不是项目根目录:
- ✅ XAMPP / Apache:修改
httpd.conf或虚拟主机配置,DocumentRoot和<directory></directory>都指向your-project/public/ - ✅ Nginx:server 块中
root必须是/path/to/your-project/public;不能是/path/to/your-project - ❌ 若 root 指向项目根目录(含 app/、system/ 等),不仅资源 404,还可能暴露敏感文件,存在安全风险
验证静态资源是否真能被直接访问
绕过框架,用浏览器直接请求一个已知存在的资源,比如:
- 访问
http://localhost/css/app.css(假设 public/css/app.css 存在) - 如果返回 404,说明 Web 服务器没正确服务
public/下的文件,和 CodeIgniter 无关 - 如果能打开,再看页面源码里引用的 URL 是什么——对比它和你实际访问的地址,就能看出
$baseURL是不是多了一级或少了一级
别忽略 .env 中的 APP_URL
CodeIgniter 4 会优先读取 .env 文件中的 app.baseURL(或旧版叫 APP_URL),它会覆盖 App.php 的设置:
- 检查
.env是否存在且未被注释:app.baseURL = "http://localhost/" - 如果
.env里写了错误的地址,哪怕App.php写对了也没用 - 开发时建议保持
.env和App.php一致;上线后应只靠.env控制











