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

CodeIgniter搭建静态页面遇路由404问题:仅首页可访问求助

解决CodeIgniter后台页面404的问题

我来帮你排查下几个关键问题,这些应该就是导致后台404的核心原因:

1. 路由与控制器方法不匹配

你的路由配置里写了:

$route['admin'] = 'admin/dashboard';

但你的Admin控制器里并没有dashboard方法,只有一个带默认参数的view方法。这条路由会找不到对应的控制器方法,自然返回404。

你可以二选一修改:

  • 方案一:调整路由规则,让admin指向admin/view(触发默认参数dashboard),同时支持其他后台页面的访问:
    $route['admin'] = 'admin/view';
    $route['admin/(:any)'] = 'admin/view/$1'; // 支持访问/admin/xxx类页面
    
  • 方案二:给Admin控制器添加dashboard方法:
    class Admin extends CI_Controller {
        // 新增dashboard方法,对应路由里的admin/dashboard
        public function dashboard() {
            $data['title'] = 'Dashboard';
            $this->load->view('admin/dashboard', $data);
        }
    
        // 保留view方法用于其他后台页面
        public function view($admin = 'dashboard') {
            if ( ! file_exists(APPPATH.'views/admin/'.$admin.'.php')) {
                show_404();
            }
            $data['title'] = ucfirst($admin); // 修正变量名错误
            $this->load->view('admin/'.$admin, $data);
        }
    }
    

2. 控制器内的变量名错误

你的Admin控制器里有个明显的低级错误:

$data['title'] = ucfirst($page);/* should be there*/

这里的$page变量根本没定义,应该替换为方法的参数$admin,否则会抛出PHP错误(可能导致页面空白或404)。修正后:

$data['title'] = ucfirst($admin);

3. 路由顺序的确认

虽然你已经把$route['admin']放在了$route['(:any)']前面,但还是要提醒下:CodeIgniter的路由是从上到下匹配的,所有具体路由(比如admin、admin/settings)必须放在(:any)这种通用路由前面,否则通用路由会先匹配,导致具体路由失效。你的现有顺序是正确的,后续新增后台路由时也要遵循这个规则。

测试验证

修改完成后,访问你的域名/admin应该就能正常加载后台仪表盘了。如果要访问其他后台页面(比如admin/settings),只要在application/views/admin/下创建settings.php,就能通过你的域名/admin/settings访问(前提是配置了$route['admin/(:any)'] = 'admin/view/$1';)。

内容的提问来源于stack exchange,提问作者Ahmad Tahhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:59:00