CodeIgniter URL优化:将GET参数改为斜杠分隔形式
解决CodeIgniter表单提交URL从查询参数转斜杠分隔的问题
嘿,我来帮你搞定这个CodeIgniter里URL格式转换的问题!要把http://example.com/controller/method?id=22&sd=31改成斜杠分隔的http://example.com/controller/method/22/31,需要两步:配置路由规则+调整表单提交逻辑,下面详细说:
第一步:配置CodeIgniter路由规则
首先得让CodeIgniter能识别这种斜杠格式的URL,打开application/config/routes.php,添加一条路由规则:
// 匹配数字参数,如果是字符串可以用(:any)代替(:num) $route['controller/method/(:num)/(:num)'] = 'controller/method/$1/$2'; // 如果参数可能为空,可设置可选: // $route['controller/method/(:num)?/(:num)?'] = 'controller/method/$1/$2';
然后修改你的控制器方法,让它直接接收这两个参数,不用再从$_GET里取:
public function method($id = null, $sd = null) { // 直接使用$id和$sd即可,比如: if ($id && $sd) { // 处理你的业务逻辑 } }
第二步:调整表单提交逻辑(两种可选方案)
默认的GET表单会自动生成?和&的查询参数,所以需要调整提交方式,这里给你两种常用方案:
方案1:用JavaScript拦截表单提交(推荐,体验更流畅)
给表单加一个ID,然后通过JS阻止默认提交,手动构造斜杠URL跳转:
修改后的HTML表单:
<form id="customForm" action="<?php echo base_url('controller/method');?>" method="get"> <div class="form-group"> <select id="id" name="id" class="selectcl form-control"> <!-- 你的下拉选项内容 --> </select> </div> <div class="form-group"> <select id="sd" name="sd" class="selectcl form-control"> <!-- 你的下拉选项内容 --> </select> </div> <button type="submit">提交</button> </form>
添加JavaScript代码:
// 拦截表单提交事件 document.getElementById('customForm').addEventListener('submit', function(e) { e.preventDefault(); // 阻止默认的GET提交行为 // 获取表单参数值 const idVal = document.getElementById('id').value; const sdVal = document.getElementById('sd').value; // 构造目标斜杠格式URL const targetUrl = '<?php echo base_url('controller/method');?>' + '/' + idVal + '/' + sdVal; // 跳转到目标URL window.location.href = targetUrl; });
方案2:用POST提交+控制器重定向(无需JS)
如果不想用JS,可以把表单改成POST提交,然后通过一个中间方法重定向到斜杠格式的URL:
修改后的HTML表单:
<form action="<?php echo base_url('controller/redirect_to_method');?>" method="post"> <div class="form-group"> <select id="id" name="id" class="selectcl form-control"> <!-- 你的下拉选项内容 --> </select> </div> <div class="form-group"> <select id="sd" name="sd" class="selectcl form-control"> <!-- 你的下拉选项内容 --> </select> </div> <button type="submit">提交</button> </form>
在控制器中添加重定向方法:
public function redirect_to_method() { // 获取POST参数 $id = $this->input->post('id'); $sd = $this->input->post('sd'); // 重定向到斜杠格式的URL redirect('controller/method/' . $id . '/' . $sd); }
注意事项
- 确保
application/config/config.php里的$config['base_url']已经正确配置(比如http://example.com/),不然base_url()函数会出错 - 路由规则里的参数顺序要和控制器方法的参数顺序完全一致
- 如果参数不是数字,把路由里的
(:num)改成(:any)或者更具体的正则匹配
内容的提问来源于stack exchange,提问作者Dingo Ghatr
相关产品推荐
相关产品推荐

