You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器下CodeIgniter主页404错误排查求助

解决CodeIgniter Linux服务器主页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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:07