codeigniter部署到linux服务器核心是确保请求能进index.php且数据可写入writable/uploads目录;需正确配置web服务器重写规则、目录权限(含执行位x)、php版本与扩展、base_url及环境变量。

CodeIgniter部署到Linux服务器,核心就两件事:请求能进得来,数据能写得进去。其他配置问题,90%都绕不开这两点。
Web服务器必须把请求正确交给index.php
CI本身不处理URL路由,全靠Web服务器把非静态资源的请求转发给index.php。漏了这步,除了首页全是404。
-
Apache:确保
mod_rewrite已启用,且对应<directory></directory>或<virtualhost></virtualhost>里写了AllowOverride All(只写FileInfo不够);.htaccess文件需放在项目根目录(CI3)或public/目录(CI4) -
Nginx:不能依赖.htaccess,必须在
server块中硬编码重写规则:try_files $uri $uri/ /index.php?$query_string;;注意$query_string不能省,否则GET参数丢失 -
CI4特别注意:DocumentRoot必须指向
public/目录,不是项目根目录;root路径设为/var/www/myapp/public,且location /里的try_files要写成/index.php?$query_string(开头不加/)
writable/和uploads/目录权限不是数字游戏
报错说“Invalid path”或“Permission denied”,大概率不是因为没给777,而是路径不存在、用户无权访问,或者缺少执行位(x)——Linux里进入目录需要x权限。
- 先确认目录存在:
mkdir -p /var/www/html/writable/sessions /var/www/html/uploads - 再改属主:
chown -R www-data:www-data /var/www/html/writable /var/www/html/uploads(Debian/Ubuntu) - 最后设权限:
chmod 700 /var/www/html/writable/sessions(session目录建议700,不是777) - CI3中
$config['sess_save_path']必须是绝对路径,推荐写法:$config['sess_save_path'] = FCPATH . 'writable/sessions';
PHP配置和扩展别掉链子
有些错误看着像框架问题,其实是PHP底层没配好。
- CI3要求PHP 5.6+,CI4要求PHP 7.3+(官方推荐PHP 8.2+),检查
php -v是否匹配 - 必需扩展:
mbstring、intl、curl、json;CI4测试还依赖sqlite3 - CI4的
.env文件要设CI_ENVIRONMENT = production,并禁用调试工具栏;CI3则需手动关掉$config['log_threshold'] = 0
base_url和index_page要填对
这两个配置影响资源加载和链接生成,填错会导致CSS/JS 404、表单提交跳转异常。
-
$config['base_url']填完整URL,例如https://example.com/(结尾带斜杠) -
$config['index_page']在开启URL重写后应设为空字符串:$config['index_page'] = ''; - CI4不用管
index_page,但.env中app.baseURL必须与域名一致,例如app.baseURL = "https://example.com/"











