OpenCart 是一个基于 PHP 开发的开源商城软件,可以用来快速搭建一个满足需要的购物网站。在之前我浅尝辄止的安装体验过 OpenCart。这次因为业务需要,准备深入了解一下这个软件。本文要介绍的是今天在 OpenCart 里面尝试配置 SEO URL 伪静态的一些经验心得。
所谓的 SEO URL 也就是对搜索引擎友好的网站地址。以 OpenCart 为例,它安装好后默认的商品链接是这样的:
/index.php?route=product/product&language=en-gb&product_id=40
可以看到,就是一个混合了各种请求参数的动态地址。在启用了 SEO URL 功能后,上面的链接会变成这样:
/en/product/a-test-product
是不是简洁清晰了许多?理论上来说,好的 SEO URL 可以提升搜索引擎的收录以及排名。对于我目前正在处理的项目来说,是至关重要的一项工作。
在 OpenCart 上开启 SEO URL 首先要做的是启用 SEO URL 链接转换功能。登陆网站后台,依次点击 System > Settings
导航菜单,然后选择要操作的店铺,点击后面的编辑按钮,在打开的编辑界面上方选择 Server 选项卡,找到 Use SEO URLs 这一项,点击后面的启用状态,最后保存。完成后回到店铺主页,刷新一下页面,就会发现分类和产品链接已经变成伪静态地址。
此时点击这些伪静态地址,会返回页面找不到的提示,原因是还需要 Web 服务器的配合。以 Nginx 为例,需要在站点的配置文件中完成以下重写配置:
server {
# ...
location / {
root /home/zzxworld/app/public/;
index index.html index.htm index.php;
try_files $uri $uri/ @originUri;
}
location @originUri {
rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
# ...
}
上面省略了一些无关配置,重启 Nginx 后就能成功访问伪静态链接。其中需要注意的是 _route_
这个请求参数。之前看到未开启 SEO URL 选项时产品链接中请求参数名称为 route
,我就在重写配置中使用了这个没有前后下划线的参数名,结果发现无法正常访问,一时百思不得其解。直到翻看到 /catalog/controller/startup/seo_url.php 文件中的 if (isset($this->request->get['_route_'])) {
这行代码,才恍然大悟。更换为代码中带下划线的参数名后成功解决。
通过以上步骤完成了 SEO URL 的伪静态配置后,会发现有些地址在访问时还是使用的动态地址。比如登陆页面,它可能还是这样的:
/en?route=account/login
这是因为 OpenCart 的伪静态是基于 oc_seo_url
数据表,它只会对这张表里有的参数和数据进行伪静态转换。如果想要登录页面的地址也伪静态化,就需要在这张表中新增一条数据。
点击后台的 Design > SEO URL
菜单,然后点右上角的添加按钮,在添加界面中分别提供以下字段值:
Key: route
Value: account/login
Keyword: login
点击保存,到店铺主页刷新页面,再次点击登录按钮,会发现链接已经变成 /en/login
。这是针对单个特殊链接的操作。对于产品,或是产品分类等数据类型,在编辑界面已经集成了 SEO URL 的功能,就不用这么单独添加。
以上就是在 OpenCart 中使用 SEO URL 的大致脉络。没理解前觉得到处是坑,理解后发现逻辑也还算清晰。oc_seo_url
这张表很关键,因为每次请求时都会遍历参数查询这张表,感觉以后数据量大了后,可能会是一个性能瓶颈。