OpenCart将页面链接更改为SEO链接


OpenCart Change Pagination Links to SEO links

我正在尝试替换OpenCart中的分页。

由此:

$pagination->url = $this->url->link('product/search', $url . '&page={page}');
// Spits out 
www.site.com/index.php?route=product/search&filter_name=QUERY&page=2

到此:

$pagination->url = $this->url->link('product/search', $url . '&page={page}');
// Spits out 
www.site.com/search?q=QUERY&page=2

该文件位于/controlog/controller/product/search.php中(OC 1.5,第438-444行附近)。完整的代码块:

$pagination = new Pagination();
$pagination->total = $product_total;
$pagination->page = $page;
$pagination->limit = $limit;
$pagination->text = $this->language->get('text_pagination');
$pagination->url = $this->url->link('product/search', $url . '&page={page}');
$this->data['pagination'] = $pagination->render();

我假设你有一个.htaccess文件设置,并且你已经在使用OpenCart 1.5中内置的SEO。如果没有,这里有一些非常好的说明:添加SEO友好的URL到OpenCart由Kevin Dees

这是一个部分破解,但如果你只想修复分页,它应该可以工作。

首先,您需要在我前面提到的.htaccess文件中添加3行。此行之后:

RewriteRule sitemap.xml /index.php?route=feed/google_sitemap

添加:

RewriteCond %{QUERY_STRING} q=([^&]*) [OR]
RewriteCond %{SCRIPT_FILENAME} .*search$
RewriteRule search$ /index.php?route=product/search&filter_name=%1 [L,QSA]

因此,在.htaccess文件的所有部分中,应该看起来像:

RewriteBase /
RewriteRule sitemap.xml /index.php?route=feed/google_sitemap
RewriteCond %{QUERY_STRING} q=([^&]*) [OR]
RewriteCond %{SCRIPT_FILENAME} .*search$
RewriteRule search$ /index.php?route=product/search&filter_name=%1 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

接下来,您需要修改/controlog/controller/product/search.php以生成正确的url。我注释掉了生成链接的行,并在上面添加了我自己的2行(您需要替换http://www.example.com与您自己的信息):

$pagination = new Pagination();
$pagination->total = $product_total;
$pagination->page = $page;
$pagination->limit = $limit;
$pagination->text = $this->language->get('text_pagination');
$url = preg_replace("/filter_name/","q",$url);
$pagination->url = "http://www.example.com/search?".$url."&page={page}";
//$pagination->url = $this->url->link('product/search', $url . '&page={page}');
$this->data['pagination'] = $pagination->render();

资源:

  • 我从RoScripts.com Pretty URL中找到了一些重写规则的基础知识,这是一个URL重写指南
  • 下面是一个如何从Nidaan的博客评论中提取查询字符串的示例
  • 最后,关于Apache的mod_rewrite访问的所有其他内容:Apache模块mod_rewrite