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
相关产品推荐
相关产品推荐

