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

CodeIgniter3路由404问题:带参数/contato/id路径无法访问

解决CodeIgniter3路由参数404问题

问题根源

  1. 路由配置错误:路由目标开头的斜杠/无效,CodeIgniter路由目标需直接写控制器/方法格式,不能带前置斜杠。
  2. 控制器未处理路径参数:当前index方法仅支持GET参数?id=xxx,未适配URL路径中的id参数。

修复步骤

1. 修正路由配置

替换原有路由为以下内容(移除前置斜杠,明确路由指向):

$route['contato'] = 'contato';
$route['contato/(:num)']['GET'] = 'contato/index/$1';
$route['contato/(:num)']['PUT'] = 'contato/update/$1';
$route['contato/(:num)']['DELETE'] = 'contato/delete/$1';

若想拆分逻辑更清晰,也可将GET单条记录的路由指向单独方法:

$route['contato/(:num)']['GET'] = 'contato/show/$1';

2. 修改控制器适配路径参数

方案一:让index方法兼容路径参数

修改index方法,添加可选参数$id,同时保留原GET参数的支持:

public function index($id = null)
{
    $data = '';

    // 优先处理路径中的id参数
    if ($id !== null) {
        $data = $this->contato_model->get($id);
    } else {
        // 兼容原有的?id=xxx方式
        $get_id = $this->input->get('id');
        if ($get_id) {
            $data = $this->contato_model->get($get_id);
        } else {
            $data = $this->contato_model->get();
        }
    }
    echo $this->ultils->toJson($data);
}

方案二:新增show方法处理单条记录查询

若选择路由指向contato/show/$1,则在控制器中添加show方法:

public function show($id)
{
    $data = $this->contato_model->get($id);
    echo $this->ultils->toJson($data);
}

原index方法可继续处理列表查询和?id=xxx的请求方式。

3. 验证URL重写配置

确保以下配置正确,避免因index.php未隐藏导致的404:

  • 在项目api目录下的.htaccess文件中添加:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
  • 修改application/config/config.php中的配置:
$config['index_page'] = '';

完成以上修改后,访问https://localhost/api/contato/1即可正常返回单条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36