CodeIgniter修改控制器与模型名称后出现404错误求助
解决CodeIgniter修改控制器/模型名后出现的404错误
嘿,我太懂你这种情况了——本来好好的网站,为了SEO改个文件名就炸出404,简直让人头大!别慌,咱们从CodeIgniter的核心规则出发,一步步排查解决:
1. 先盯紧控制器的命名规范(最常见的坑)
CodeIgniter对控制器的文件名和类名大小写要求特别严格,尤其是在Linux服务器上(Windows可能不敏感,但生产环境大多是Linux):
- 控制器文件名必须是首字母大写的格式,比如你改成了
BlogController.php,就不能写成blogcontroller.php或者Blogcontroller.php - 控制器类名必须和文件名完全匹配,比如文件名是
BlogController.php,类定义就得是:
要是大小写对不上,服务器根本找不到这个控制器,直接返回404。class BlogController extends CI_Controller { // 你的代码 }
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
相关产品推荐
相关产品推荐

