CodeIgniter部署需Apache正确路由至index.php,否则非首页URL全404;关键在DocumentRoot指向正确、AllowOverride All启用、.htaccess生效及writable目录权限合法(www-data所有者+执行位)。

CodeIgniter 本身不强制要求虚拟主机,但实际部署时必须配合 Apache 正确路由请求到 index.php,否则除首页外所有 URL 都会返回 404。关键不在“CI 要配虚拟主机”,而在于:让 Apache 把请求准确交给 CI 的入口文件,并确保 writable 目录可写。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
Apache 虚拟主机配置要点(适配 CodeIgniter)
-
DocumentRoot必须指向 CI 项目根目录(含index.php),不是application/,也不是public/(除非是 CI4 且启用 public 入口模式) - 若用 CI3 或默认结构,
DocumentRoot /var/www/myapp(该路径下有index.php、application/、writable/等) - 若用 CI4 并启用
public/入口,DocumentRoot应设为/var/www/myapp/public,此时.htaccess在public/内,且需额外加SetEnvIf传递原始 URI -
<Directory>块中必须包含AllowOverride All,否则 CI 自带的.htaccess(含重写规则)不会生效 -
Options FollowSymLinks和Require all granted不可省略,否则可能触发 403
URL 重写必须生效(避免 404)
- 确保 Apache 已启用
mod_rewrite:sudo a2enmod rewrite && sudo systemctl restart apache2 -
.htaccess文件需放在DocumentRoot所指目录下(CI3 是项目根,CI4 public 模式是public/目录) -
.htaccess内容应类似:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] - 仅写
AllowOverride FileInfo不够,CI 的.htaccess含Options和Order指令,必须用AllowOverride All
writable/ 和 uploads/ 目录权限要合法
- 报错如 “mkdir(): Invalid path” 或 session 创建失败,90% 是因为
$config['sess_save_path']设了相对路径或空值 - 正确写法(CI3 或 CI4 均适用):
$config['sess_save_path'] = FCPATH . 'writable/sessions/';
- 手动创建目录并赋权(以 Ubuntu 为例):
sudo mkdir -p /var/www/myapp/writable/sessions sudo chown -R www-data:www-data /var/www/myapp/writable sudo chmod 700 /var/www/myapp/writable/sessions
- 权限 ≠ 777;关键是
www-data用户拥有所有权,且父目录有执行位(x),否则 PHP 无法进入子目录
测试与验证步骤
- 访问
http://your-domain.com/,应显示 CI 欢迎页 - 访问
http://your-domain.com/index.php/welcome,应正常加载 welcome 控制器(验证重写是否生效) - 访问
http://your-domain.com/test(一个不存在的路由),若返回 CI 的 404 页面而非 Apache 默认 404,说明重写和路由已通 - 查看
writable/logs/是否有新日志生成,确认写入权限正常
不复杂但容易忽略

















