Linux服务器下CodeIgniter主页404错误排查求助
我之前也碰到过类似的跨环境路由问题,结合你的配置信息,给你几个针对性的排查和解决方向:
1. 清理多余的根路由配置
你在routes.php里添加的$route['/'] = 'index/index';其实是画蛇添足的——CodeIgniter的default_controller已经指定了index,访问根路径时会自动映射到index控制器的index方法,这条额外的路由反而可能干扰默认逻辑。直接删掉它,保留核心路由配置即可:
$route['default_controller'] = 'index'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE; $route['index'] = 'index/index'; // 这行可以保留,不影响默认路由
2. 检查控制器文件名的大小写(Linux核心坑)
Linux是大小写敏感系统,和Windows的宽松规则不一样。你需要确保application/controllers/下的控制器文件名是首字母大写的Index.php,对应的类名也要和文件名完全一致:
<?php class Index extends CI_Controller { public function index() { // 你的主页逻辑代码 } }
如果文件名是全小写的index.php,Linux下CI会找不到这个控制器,直接返回404;而访问example.com/index/index时因为路由明确指定,可能暂时绕过了这个问题。
3. 调整.htaccess的Rewrite规则
你当前的RewriteRule用了./index.php/$1,在Linux Apache环境下可能存在路径解析问题,改成绝对路径写法试试:
DirectoryIndex index.php RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php/$1 [L,QSA] Options -Indexes php_flag output_buffering On
另外要确认Linux服务器上的Apache已经启用了mod_rewrite模块,可通过a2enmod rewrite命令开启,之后重启Apache服务。
4. 调整uri_protocol配置
试试把config.php里的uri_protocol改成PATH_INFO,部分Linux环境下AUTO或REQUEST_URI对根路径的解析会出现异常:
$config['uri_protocol'] = 'PATH_INFO';
5. 确认Apache虚拟主机的.htaccess权限
检查你的服务器虚拟主机配置,确保项目目录的AllowOverride设置为All,否则.htaccess的规则根本不会生效:
<Directory /var/www/html/你的项目路径> AllowOverride All Require all granted </Directory>
按这几步排查下来,基本就能解决主页404的问题了。
内容的提问来源于stack exchange,提问作者Majid Ramzani

