codeigniter静态资源加载失败主因是web根目录未指向public/、baseurl配置不匹配、nginx未直供静态文件、linux大小写敏感或权限不足。

静态资源加载失败在 CodeIgniter 项目中很常见,多数不是代码写错了,而是路径、配置或服务器行为没对齐。核心问题往往出在浏览器请求的 URL 和实际文件存放位置/服务方式之间断了链路。
Web 根目录配置错误
CodeIgniter 要求 Web 服务器(如 Apache 或 Nginx)的根目录必须指向 public/ 目录,而不是项目根目录或 app/ 目录。
- ✅ 正确:XAMPP 的 httpd.conf 指向
htdocs/your-project/public/ - ❌ 错误:指向
htdocs/your-project/或htdocs/your-project/app/—— 这会导致/css/app.css等请求根本找不到文件,甚至暴露敏感目录 - 验证方法:直接在浏览器访问
http://localhost/css/app.css,看是否返回 404 还是能下载文件
App Base URL 设置不匹配
app/Config/App.php 中的 $baseURL 必须与你实际访问项目的域名和路径一致,否则生成的资源链接(如 <link href="css/app.css">)会拼错前缀。
- ✅ 开发时本地运行:
public $baseURL = 'http://localhost/'; - ❌ 常见错误:
'http://localhost/myapp/public/'(多加了子路径)或留空(导致所有资源路径变成相对路径,易失效) - 注意:这个值影响
base_url()辅助函数输出,所有base_url('css/app.css')都依赖它
静态资源未由 Web 服务器直供(尤其 Nginx 场景)
当用 Nginx 反向代理 CodeIgniter 应用时,如果没显式配置静态资源规则,所有 .js、.css 请求都会被转发给 PHP 后端,而 CodeIgniter 默认不处理这些文件——结果就是 404 或 500。
- ✅ 推荐做法:让 Nginx 直接服务静态文件,不走 PHP
- 示例配置(放在 server 块内):
location ~* \.(js|css|png|jpg|gif|woff2|svg|ico)$ {
root /var/www/your-project/public;
expires 1y;
} - ⚠️ 注意:
root是拼接路径,所以root /public+ 请求/css/app.css→ 实际读取/public/css/app.css
文件权限或大小写不一致
Linux 服务器严格区分大小写,而 Windows 不敏感——开发时没问题,部署到 Linux 就报 404。
- 检查控制器里写的路径:
base_url('CSS/app.CSS')在 Linux 下找不到css/app.css - 确认 public 目录下文件真实存在且可读:
ls -l public/css/,确保 web 用户(如 www-data)有读取权限 - CI 自带的
public/index.php已设好入口,但不要把 JS/CSS 放进app/或writable/这类非公开目录











