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

CodeIgniter3如何通过htaccess配置实现店铺名替换ID的URL访问

核心方案说明

通过htaccess无法直接实现该需求,因为店铺名称与店铺ID的映射关系存储在数据库中,htaccess无法动态读取数据库内容做路径匹配,正确方式是基于CodeIgniter 3自带的路由规则+业务逻辑调整实现。


步骤1:修正现有基础配置错误

首先修复现有配置的明显问题:

修正后的.htaccess文件

把HTTP跳转规则放到最前面,避免静态规则被CI入口规则拦截:

RewriteEngine On
# HTTP转HTTPS规则放最前
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://coffee.com/shop/$1 [R=301,L]

# CI默认入口重写规则
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

修正config.php的语法错误

原base_url漏了末尾的单引号:

$config['base_url'] = 'https://coffee.com/shop/';

步骤2:新增数据库查询方法

在application/models/User_model.php中新增根据店铺名称查询卖家信息的方法,提前确认seller表中店铺名称字段已经加了唯一索引,避免重复数据:

// 按店铺唯一名称查询卖家信息
public function get_seller_by_shop_name($shop_name) {
    return $this->db->get_where('seller', ['shop_name' => $shop_name])->row_array();
}

步骤3:调整控制器逻辑

修改原shops方法,接收参数从卖家ID改为店铺名称:

public function shops($shop_name = '')
{
    // 按店铺名查询卖家信息
    $seller = $this->user_model->get_seller_by_shop_name($shop_name);
    if(empty($seller)) {
        // 店铺不存在跳404
        show_404();
    }
    $seller_id = $seller['id'];
    $this->data['pList'] = $this->product_model->get_productType(null,$seller_id,null,null);
    $this->data['seller'] = $seller;
    $this->template->load('layouts/main', 'pages/shop_paging',$this->data);
}

步骤4:配置自定义路由

编辑application/config/routes.php,添加路由规则匹配店铺名称路径:

// 店铺自定义URL规则,优先级放于其他通用规则之后,避免覆盖正常业务路径
$route['([a-zA-Z0-9_-]+)'] = 'page/shops/$1';

如果需要限制店铺名称的字符范围,可以调整正则匹配规则,比如只允许小写字母+数字,改成$route['([a-z0-9]+)'] = 'page/shops/$1';


步骤5:旧URL兼容跳转(可选但推荐)

为了避免原有带ID的URL失效、丢失SEO权重,可以在控制器中新增旧路径跳转逻辑:访问原路径/page/shops/[id]时,查询对应的店铺名称,301跳转到新的/[店铺名]路径即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:21:01