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

Opencart 4移除URL中/product后商品页跳转首页问题求助

OpenCart 4迁移:移除URL中/product后商品页跳首页的解决方法

问题根源

你只修改了SEO URL的生成逻辑(让前端显示的URL去掉/product),但没有同步修改URL解析逻辑——当用户访问去掉/product的URL时,系统无法识别这是商品页路由,因此默认跳转到首页。

解决方案

需要同时处理URL的「生成」和「解析」两个环节,确保双向匹配:

1. 优化URL生成代码(兼容低版本PHP)

在catalog/controller/startup/seo_url.php的rewrite方法中,保留你的核心逻辑,替换为兼容PHP7.4及以下的写法:

// 替换原来的return $url;
if (strpos($url, '/product') !== false) {
    $newPath = explode('product/', $url);
    return implode('', $newPath);
} else {
    return $url;
}

2. 添加URL解析逻辑(关键步骤)

同样在catalog/controller/startup/seo_url.php的index方法中,找到if (isset($this->request->get['_route_']))代码块,替换为以下逻辑,让系统能识别不带/product的商品URL:

if (isset($this->request->get['_route_'])) {
    $keyword = $this->request->get['_route_'];
    
    // 优先检查该URL是否对应商品
    $product_seo_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($keyword) . "' AND query LIKE 'product_id=%'");
    
    if ($product_seo_query->num_rows) {
        // 匹配到商品,设置对应路由和参数
        $this->request->get['product_id'] = str_replace('product_id=', '', $product_seo_query->row['query']);
        $route = 'product/product';
        unset($this->request->get['_route_']);
    } else {
        // 保留系统默认的其他页面(分类、信息页等)解析逻辑
        $seo_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($keyword) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
        
        if ($seo_query->num_rows) {
            $query = $seo_query->row['query'];
            parse_str($query, $data);
            
            foreach ($data as $key => $value) {
                if (isset($this->request->get[$key])) {
                    unset($this->request->get[$key]);
                }
            }
            
            $this->request->get = array_merge($this->request->get, $data);
        } else {
            $route = 'error/not_found';
        }
    }
}

3. 清除系统缓存

修改完成后,进入OpenCart后台「系统 → 缓存」页面,点击「清除缓存」,确保新的路由规则生效。

注意事项

  • 提前备份原seo_url.php文件,避免后续系统升级覆盖修改。
  • 如果商品URL包含多级路径(如/electronics/iphone-15),需要调整解析逻辑,确保能精准匹配到商品的SEO关键词。
  • 避免和分类页等其他页面的URL冲突,可通过检查SEO URL表的query字段是否包含product_id来精准判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:47:19