ci3与ci4基础路径配置差异源于架构逻辑转变:ci3为集中式目录结构,ci4为分层隔离式结构,决定web根目录指向、资源加载及安全边界。

CodeIgniter 3 和 4 的基础路径配置差异本质是架构逻辑的转变:CI3 是“集中式目录结构”,CI4 是“分层隔离式结构”,直接决定 Web 根目录指向哪、资源怎么加载、甚至安全边界在哪。
Web 服务器根目录必须指向不同位置
CI3 可以把整个项目丢进 htdocs/myapp/,然后 Apache/Nginx 根目录设为该文件夹,index.php 就是入口,访问 http://localhost/myapp/ 即可运行。
CI4 不行——你必须把 Web 根目录指向 project-root/public/(比如 htdocs/myproject/public/)。如果还像 CI3 那样指向项目根,会直接暴露 app/、system/ 等敏感目录,或报出 “Whoops! We seem to have hit a snag” 这类路径错误,不是代码问题,是部署错位。
基础 URL(baseURL)设置方式和作用范围不同
CI3 中,$config['base_url'] 在 application/config/config.php 里定义,是个字符串,主要用于生成静态资源链接(CSS/JS/img)和重定向辅助。
CI4 中,baseURL 是 app/Config/App.php 类的一个 public 属性:public $baseURL = 'http://localhost:8080/';
它不仅影响资源路径,还参与路由解析、CSRF token 生成、邮件链接构造等。漏设或写成 http://localhost/myapp/public/(带子目录)会导致 CSS/JS 404、表单提交失败等连锁问题。
核心目录职责彻底分离,路径不可混用
- CI3:所有业务代码在
application/下,system/是框架内核,两者平级;index.php手动指定$system_path和$application_folder - CI4:
app/(你写的控制器、模型、配置)、system/(只读框架源码)、public/(唯一对外可见入口 + 静态文件),三者严格分层;public/index.php自动引导,不再允许手动挪动或重命名入口文件 - CI4 的
writable/目录必须可写,且路径固定(不在public/内),用于日志、缓存、session 存储;CI3 的application/logs/和application/cache/路径则由配置动态控制
.env 文件成为 CI4 的路径与环境配置中枢
CI3 没有 .env 支持,所有配置靠 PHP 数组文件硬编码。
CI4 默认启用 .env,其中 app.baseURL 可直接覆盖 App.php 中的值,且优先级更高。但注意:
– 键名必须全大写加点号路径,如 app.baseURL="https://myapp.test/"
– 值前后不能有空格,否则被识别为空
– 修改后需清空 writable/cache/,否则旧缓存会让新 baseURL 看似不生效











