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

CodeIgniter修改控制器与模型名称后出现404错误求助

解决CodeIgniter修改控制器/模型名后出现的404错误

嘿,我太懂你这种情况了——本来好好的网站,为了SEO改个文件名就炸出404,简直让人头大!别慌,咱们从CodeIgniter的核心规则出发,一步步排查解决:

1. 先盯紧控制器的命名规范(最常见的坑)

CodeIgniter对控制器的文件名和类名大小写要求特别严格,尤其是在Linux服务器上(Windows可能不敏感,但生产环境大多是Linux):

  • 控制器文件名必须是首字母大写的格式,比如你改成了BlogController.php,就不能写成blogcontroller.php或者Blogcontroller.php
  • 控制器类名必须和文件名完全匹配,比如文件名是BlogController.php,类定义就得是:
    class BlogController extends CI_Controller {
        // 你的代码
    }
    
    要是大小写对不上,服务器根本找不到这个控制器,直接返回404。

2. 更新路由配置文件

改了控制器名称后,原来的路由规则肯定失效了,赶紧打开application/config/routes.php检查:

  • 默认控制器:把$route['default_controller'] = '旧控制器名';改成新的控制器名,比如$route['default_controller'] = 'blog_controller';
  • 自定义路由:如果之前写过类似$route['contact-us'] = 'old_contact/contact_form';的规则,一定要把old_contact替换成新的控制器名称,不然访问这些自定义路径时还是会找旧控制器,自然404。

3. 模型命名和引用也要同步检查

虽然404主要是路由/控制器的问题,但如果控制器里调用模型时还用旧名字,可能会导致控制器执行出错(间接引发404):

  • 模型文件名同样要遵循首字母大写的规范,比如UserModel.php,类名是class UserModel extends CI_Model
  • 控制器里加载模型时,要用新的模型名:$this->load->model('user_model');(注意这里CI允许小写加载,但文件名必须首字母大写)

4. 检查.htaccess的URL重写规则

如果你用了URL重写来去掉index.php,确保.htaccess的规则没问题,标准的CodeIgniter重写规则应该是这样的:

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

要是之前改过这个文件,可能不小心破坏了规则,导致请求无法正确路由到新控制器。另外,清一下浏览器缓存或者重启本地服务器(比如XAMPP/WAMP)试试,有时候缓存会搞鬼。

5. 生产环境别忘清服务器缓存

如果是线上服务器,PHP的OPcache或者APC缓存可能还存着旧的控制器类,导致新的控制器没被加载。这时候重启PHP-FPM或者Web服务器(Apache/Nginx)就能清除缓存,让新的控制器生效。

按照上面的步骤排查,90%的情况都能解决这个404问题。要是还不行,可以再检查一下控制器里的方法名有没有同步修改,毕竟有时候改了控制器名,方法的路由也可能受影响~

内容的提问来源于stack exchange,提问作者Faisal Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:29