OpenCart技术咨询:如何移除SEO链接中的查询参数
OpenCart技术咨询:如何移除SEO链接中的查询参数
嘿,我来帮你搞定OpenCart里SEO链接还带着查询参数的问题!其实核心就是调整SEO URL的重写逻辑,让所有原本在查询串里的参数都被整合到友好的路径中,彻底去掉那些?xxx=xxx的尾巴。
首先,你要找到catalog/controller/startup/seo_url.php这个文件——就是你提供的SeoUrl控制器所在的位置,接下来咱们一步步调整:
- 先确认后台的SEO URL功能已经开启(代码里的
config_seo_url已经设为启用,这部分你当前的代码已经做了判断,没问题)。 - 重点要修改的是
SeoUrl类里的rewrite方法(因为addRewrite($this)会让OpenCart的URL系统调用这个方法处理重写逻辑),要让它把所有GET参数都转化为SEO路径,而不是留在查询串里。
给你一个具体的修改思路,替换原有rewrite方法即可:
public function rewrite($link) { $url_info = parse_url(str_replace('&', '&', $link)); $url = ''; $data = []; parse_str($url_info['query'], $data); if (isset($data['route'])) { $query = $data['route']; unset($data['route']); // 把所有查询参数拼接到路由字符串里 foreach ($data as $key => $value) { $query .= '/' . $key . '/' . $value; } // 匹配对应的SEO URL规则 $seo_url = $this->model_design_seo_url->getSeoUrl($query, $this->config->get('config_language_id'), $this->config->get('config_store_id')); if ($seo_url) { $url = '/' . $seo_url; } else { $url = '/' . $query; } } if ($url) { return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url; } else { return $link; } }
这段代码的逻辑是把所有查询参数都拼接成标准的路由字符串,再通过SEO URL模型匹配对应的友好路径,这样就能把原本在?后面的参数全部转化为URL路径的一部分。
另外要提醒你:修改核心文件前一定要先备份,避免改出问题没法恢复;同时要确保后台已经给产品、分类等页面设置了正确的SEO关键词,这样系统才能正确生成对应的友好链接。
备注:内容来源于stack exchange,提问作者mehmetmutlu16
相关产品推荐
相关产品推荐

