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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:18