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

CodeIgniter路由时控制器失效,请求URL未找到问题咨询

解决CodeIgniter路由404错误(The requested URL was not found on this server)

针对你遇到的问题,结合路由配置和运行环境,以下是常见排查方向与解决方法:

1. Apache重写模块未开启

XAMPP默认可能未启用mod_rewrite模块,导致URL重写失效,无法将请求转发到CodeIgniter入口文件index.php:

  • 打开XAMPP的Apache配置文件httpd.conf(路径通常为D:/xampp/apache/conf/httpd.conf)
  • 找到#LoadModule rewrite_module modules/mod_rewrite.so,删除行首的#注释
  • 重启Apache服务

2. 缺失或错误配置.htaccess文件

CodeIgniter需要通过.htaccess移除URL中的index.php,否则直接访问路由会被Apache判定为不存在的目录/文件:
在项目根目录D:/xampp/htdocs/cresentLake/下创建.htaccess文件,写入以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

若已有.htaccess,检查内容是否与上述一致,重点确认RewriteRule规则。

3. Apache的AllowOverride权限未放开

即使开启了重写模块,若Apache禁止目录的.htaccess覆盖权限,规则也无法生效:

  • 打开httpd.conf,找到对应htdocs目录的<Directory>块(通常为<Directory "D:/xampp/htdocs">)
  • 将AllowOverride None修改为AllowOverride All
  • 重启Apache服务

4. 控制器不符合CodeIgniter命名规范

CodeIgniter 4对控制器的命名、路径有严格要求:

  • 控制器文件必须放在App/Controllers/目录下,文件名首字母大写(如Inventory.php)
  • 类名需与文件名完全一致,且继承CodeIgniter\Controller,示例代码:
<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Inventory extends Controller
{
    public function available_inventory()
    {
        // 方法逻辑
    }
}
  • 确保控制器中的目标方法为public权限,私有/受保护方法无法通过路由访问

5. 访问路径错误

你的项目根目录为D:/xampp/htdocs/cresentLake/,访问路由时必须带上项目子目录名:

  • 正确路径:http://localhost/cresentLake/available_inventory
  • 错误路径:http://localhost/available_inventory(直接访问会跳过项目目录,导致404)

6. 路由规则冲突排查(可选)

虽然开启了自动路由,但手动配置的路由若存在冲突也可能引发问题。可暂时注释所有手动添加的路由,测试自动路由是否生效(如访问http://localhost/cresentLake/inventory/available_inventory,对应Inventory控制器的available_inventory方法),若能正常访问,再逐步排查手动路由的问题。


内容的提问来源于stack exchange,提问作者Abdul Mannan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:20:34