事实证明,这可以通过对单个文件进行相对简单的更改来完成。没有 .htaccess 重写规则,只需修补 Catalog/controller/common/seo_url.php 文件并将漂亮的 URL 添加到现有数据库表中。
seo_url.php 的补丁:
Index: catalog/controller/common/seo_url.php
===================================================================
--- catalog/controller/common/seo_url.php (old)
+++ catalog/controller/common/seo_url.php (new)
@@ -48,7 +42,12 @@
$this->request->get['route'] = 'product/manufacturer/product';
} elseif (isset($this->request->get['information_id'])) {
$this->request->get['route'] = 'information/information';
- }
+ } else {
+ $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($this->request->get['_route_']) . "'");
+ if ($query->num_rows) {
+ $this->request->get['route'] = $query->row['query'];
+ }
+ }
if (isset($this->request->get['route'])) {
return $this->forward($this->request->get['route']);
@@ -88,7 +87,15 @@
}
unset($data[$key]);
- }
+ } else {
+ $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($data['route']) . "'");
+
+ if ($query->num_rows) {
+ $url .= '/' . $query->row['keyword'];
+
+ unset($data[$key]);
+ }
+ }
}
}
需要进行两次编辑。第一个扩展了index()
函数来查看url_alias
表为any关键词匹配$this->request->get['_route_']
.
第二个扩展了rewrite()
函数来查看url_alias
表为all路线,不仅仅是产品、制造商和信息页面的路线。
将条目添加到数据库:
INSERT INTO `url_alias` (`url_alias_id`, `query`, `keyword`) VALUES
(NULL, 'checkout/cart', 'cart');
就是这样。http://example.com/cart http://example.com/cart应该返回相同的东西http://example.com/index.php?route=checkout/cart http://example.com/index.php?route=checkout/cart确实如此,OpenCart 应该认识到$this->url->link('checkout/cart');
并返回一个指向漂亮 URL 的链接http://example.com/cart http://example.com/cart