CodeIgniter 4.7.2 首页404主因是未正确配置 public/ 入口:Apache需启用mod_rewrite、保留public/.htaccess且AllowOverride All;Nginx需root指向public/;baseURL必须设为http://localhost/myapp/public/;数据库优先读取根目录.env文件;路由需显式关闭自动路由避免冲突。

访问首页 404?先确认 public/ 是不是被绕过了
CodeIgniter 4.7.2 默认不允许直接访问项目根目录,index.php 必须从 public/ 目录下执行。如果你打开 http://localhost/myapp/ 报 404,但改成 http://localhost/myapp/public/ 就能显示欢迎页——说明你没配重写规则,或者误删了 public/.htaccess。
Apache 用户需确保:
- mod_rewrite 已启用
- public/.htaccess 存在且未被注释掉(尤其注意 AllowOverride All 是否在虚拟主机配置里放开)
- Nginx 用户必须把 root 指向 public/ 目录,而不是项目根目录;否则 try_files 会找不到 index.php
base_url 配错会导致 CSS/JS 全挂,不是 500 错误而是资源 404
CI4.7.2 的 base URL 不再写在 app/Config/App.php 里的 $baseURL 属性上就完事——它只控制框架生成的链接(如 site_url()),而静态资源路径(CSS、JS、图片)依赖的是 Web 服务器实际可访问的路径。常见错误包括:
-
$baseURL = 'http://localhost/myapp/'—— 但你的入口其实是/myapp/public/,结果所有base_url('css/app.css')都拼成http://localhost/myapp/css/app.css,404 - 正确写法应为:
$baseURL = 'http://localhost/myapp/public/';(末尾斜杠不能少) - 如果用了域名或 HTTPS,比如部署到
https://example.com/app/,那$baseURL必须严格匹配浏览器地址栏里看到的协议+域名+路径前缀
数据库连不上?检查 .env 而不是 database.php
CI4.7.2 默认启用 .env 文件优先加载,app/Config/Database.php 只是兜底配置。如果你改了 database.php 却没生效,大概率是因为 .env 里还存着旧配置,且没被注释或删除。
关键点:
-
.env必须放在项目根目录(和public/同级),不能放错位置 - 格式必须是
database.default.hostname = localhost,等号前后不能有空格 - 密码含特殊字符(如
@、/)时,整个值要用双引号包裹:database.default.password = "p@ss/w0rd" - 修改后需清空
writable/cache/和writable/logs/,否则缓存可能让旧配置继续生效
路由不生效?别漏掉 $routes->setAutoRoute(false) 的副作用
CI4.7.2 默认开启自动路由($routes->setAutoRoute(true)),但它只匹配 Controller::method 形式,且要求控制器类名和方法名都符合规范。一旦你在 app/Config/Routes.php 里写了自定义路由,又忘了关自动路由,就可能出现:
- 访问
/user/profile却进了User::profile(),而不是你定义的$routes->get('user/profile', 'Profile::show') - 更隐蔽的问题:自动路由会覆盖部分显式路由,尤其当 URL 路径恰好能被自动解析时
建议做法:
- 显式定义路由前加 $routes->setAutoRoute(false);
- 或者保留 true,但确保所有控制器方法命名不含下划线、首字母大写、且不与 URL 路径冲突
CI4.7.2 的路由解析发生在请求早期,一旦匹配失败就不会 fallback 到其他规则——所以顺序和关闭自动路由这两件事,比写对语法更容易出问题。


















