将CodeIgniter项目从Windows迁移至Ubuntu 16.04后遇CI自定义404错误
解决CodeIgniter迁移至Ubuntu 16.04后持续404的问题
我之前迁移CI项目到Ubuntu时也踩过类似的404坑,结合你的配置细节,咱们一步步排查解决:
1. 启用Apache的mod_rewrite模块
Ubuntu默认没开启这个模块,但CI的路由规则(尤其是去掉index.php的场景)依赖它:
- 执行命令启用模块:
sudo a2enmod rewrite - 重启Apache生效:
sudo service apache2 restart
2. 完善虚拟主机的目录权限配置
你的虚拟主机配置缺少<Directory>块,这会导致Apache不识别目录下的.htaccess规则,也可能限制了目录访问权限。修改虚拟主机配置文件(通常在/etc/apache2/sites-available/下):
<VirtualHost *:80> ServerAdmin mymail@mymail.com ServerName mywebiml.com ServerAlias www.mywebiml.com DirectoryIndex index.php DocumentRoot /var/www/html/CLASE # 新增这个目录配置块 <Directory /var/www/html/CLASE> Options Indexes FollowSymLinks MultiViews AllowOverride All # 允许.htaccess生效 Require all granted </Directory> </VirtualHost>
修改后重载Apache:
sudo service apache2 reload
3. 调整CodeIgniter核心配置
- 设置正确的base_url:不要留空,填上你的域名:
$config['base_url'] = 'http://mywebiml.com/'; - 优化URL路由(可选但推荐):如果想去掉URL里的
index.php,先在CLASE根目录创建.htaccess文件,内容如下:
然后修改RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]config.php里的index_page配置:$config['index_page'] = '';
4. 修复文件与目录权限
Ubuntu下Apache以www-data用户运行,必须确保CI目录的权限正确:
- 递归设置目录权限为755:
sudo chmod -R 755 /var/www/html/CLASE - 递归设置文件权限为644:
sudo chmod -R 644 /var/www/html/CLASE/* - 修改目录所有者为www-data:
sudo chown -R www-data:www-data /var/www/html/CLASE
最后验证
完成以上步骤后,重启Apache,访问http://mywebiml.com应该就能正常加载了。如果还是出现404,可以查看Apache的错误日志定位具体问题:
tail -f /var/log/apache2/error.log
内容的提问来源于stack exchange,提问作者Ivan M
相关产品推荐
相关产品推荐

