codeigniter页面404主因是路由未接通:需协同配置web服务器重写规则(apache的.htaccess或nginx的try_files)、框架设置($config['index_page'] = ''及ci4显式路由定义)与url/控制器命名约定(url小写、类名首字母大写)。

CodeIgniter页面访问直接报404,不是控制器逻辑出错,而是请求压根没进框架——90%的问题卡在路由入口没打通,必须从Web服务器重写规则、框架配置、URL映射三者协同关系入手排查。
确认是否真为路由问题而非其他错误
在浏览器中访问 http://yourdomain.com/index.php/welcome。能打开欢迎页,但 http://yourdomain.com/welcome 报404,说明是重写规则失效,不是代码或控制器问题。
如果连 index.php/welcome 都404,先检查 application/controllers/Welcome.php 是否存在、类名是否为 Welcome、是否继承 CI_Controller、是否含 public function index() 方法。
Apache环境:检查 .htaccess 与重写开关
方法一:验证 .htaccess 是否生效
确保项目根目录(或 public/ 目录)下存在 .htaccess 文件,内容包含以下关键三行:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
【/$1不能漏掉开头斜杠】——漏掉会导致 URI 段落丢失,/user/profile 变成 index.phpuser/profile,控制器无法识别。
方法二:确认 Apache mod_rewrite 已启用
在 phpinfo() 页面搜索 “mod_rewrite”,若未出现,需在 httpd.conf 中取消 LoadModule rewrite_module modules/mod_rewrite.so 前的注释,并重启 Apache。
方法三:检查 AllowOverride 设置
在虚拟主机配置中确认 DocumentRoot 对应目录的
CodeIgniter 4 必须显式定义路由
第一步:打开 app/Config/Routes.php
CI4 默认禁用自动路由($routes->setAutoRoute(false)),哪怕你已创建 app/Controllers/Home.php 并含 index() 方法,不写路由就绝对 404。
第二步:添加基础 GET 路由
例如让 /home 访问 Home 控制器的 index 方法,必须写:$routes->get('/home', 'Home::index');
第三步:检查大小写与命名一致性
URL 路径小写(/home),控制器类名首字母大写(Home),方法名小写(index);文件名必须是 Home.php,不能是 home.php 或 HOME.PHP。
第四步:确认 Web 根目录指向正确
Nginx/Apache 的 root 必须指向 public/ 目录,不是项目根目录或 app/ 目录——指向错误会导致 index.php 找不到或安全风险。
Nginx 环境:替换 try_files 规则
直接跳过 .htaccess,修改 server 块中的 location ~ \.php$ 配置段:
将原有 fastcgi_param SCRIPT_FILENAME 行替换为:
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
并在 location / 块中加入:
try_files $uri $uri/ /index.php?$query_string;
【root 必须指向 public/ 目录】——例如 root /var/www/myapp/public;,否则 /index.php 无法定位。
验证 BaseURL 与 AJAX 请求路径
在 JS 中打印 BASE_URL:console.log('<?php echo="">');<!--?php--><!--?php--><!--?php--><!--?php--><!--?php-->?php>
若输出为 http://localhost/myapp(无尾部斜杠),拼接 '/api/login' 会变成 http://localhost/myappapi/login → 404。
修复方式:在 App.php 中设置 public $baseURL = 'http://localhost/myapp/';(结尾带斜杠),或 JS 中统一补全:const API_BASE = '<?php echo="" .="">';<!--?php--><!--?php--><!--?php--><!--?php--><!--?php-->?php>










