CodeIgniter3路由404问题:带参数/contato/id路径无法访问
解决CodeIgniter3路由参数404问题
问题根源
- 路由配置错误:路由目标开头的斜杠
/无效,CodeIgniter路由目标需直接写控制器/方法格式,不能带前置斜杠。 - 控制器未处理路径参数:当前
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
相关产品推荐
相关产品推荐

