微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-如何将现有的类别和产品转换为SEO友好的URL

我最近进行了一个项目,将旧的购物车网站(定制开发)转换为现代的SEO友好网站

这是我的问题,当前站点使用如下URL

http://www.domain.com/page.PHP?id=XX

我想将现有的页面数据库(产品和类别)转换为类似于以下内容的URL

http://www.domain.com/confectionery-&-snacks/lollies/cola-zombie-chews

如果用户删除cola-zombie-chews,则网址应如下所示,并加载页面棒棒糖,依此类推,如果删除了棒棒糖,则将加载页面糖果和糖果.零食

http://www.domain.com/confectionery-&-snacks/lollies/

当前的数据库设置类似于以下内容

   ID   |    TYPE   | NAME
--------+-----------+------------
   1    |  category | confectionery & snacks
   2    |  category | lollies
   3    |  product  | cola zombie chews

一个问题是URL可能有4个类别,例如下面所示

http://www.domain.com/frozen-foods/seasonal/christmas/meat/smoked-salmon-1kg

我需要哪种类型的重写规则,以及我需要哪种类型的代码检查数据库中的url

我曾考虑过要在数据库中为子弹添加一个列,然后复制名称删除空格并替换为-

解决方法:

我认为@Vrac的回答很好1 :). @AntoineB也有一点.因此,我想在url创建部分添加一种稍有不同的方法,并进行更详细的介绍.

您想使用搜索引擎友好的URL,那么您需要做两件事:

>用所需的网址替换所有网址的page.PHP?id = XX.因此,此时单击新URL将返回404.
>所有新的URL应该对您的PHP有意义-这就是.htaccess PHP路由器的工作.

对于步骤1,

我想在每个产品页面上您都可以访问哪个产品属于哪个类别.如果数据库模式如您所提供的那样,则架构不足以确定哪个类别.因此,您需要第4列父级,该列将存储每个类别或产品的父级类别的ID.
而且,无论是类别还是对象,它们都具有一个类别作为父类别,或者根类别为nu​​ll.

页面中为类别或产品生成URL的PHP中,您需要从数据库获取与当前项目关联的所有类别,并从最后一个嵌套节点(当前项目)到根爬上树.

因此,您将有一个循环,就像下面的简化代码所示.

小费:

>如果项目较少,则一次从db获取所有内容以保存数据库查询,然后循环搜索结果(在数组中)-情况称为a;
>否则,从仅从其ID查询当前项开始并获取其父项,然后在循环中执行另一个查询以再次获取新的父项-将其称为b;

因此,您将获得父级的父级,依此类推,直到parent为null.

<?PHP

$itemTree = [];
$allDBItems = MysqL_query('SELECT * FROM items');

while($parent)
{
    // getParent() is a function that loops on $allDBItems - in case a - and break loop on found $currItemInLoop['id'] === $myItem['parent']
    // or - in case b - query the db like MysqL_query("SELECT * FROM items WHERE id = $myItem[parent]");
    $parent = getParent();

    if ($parent) $itemTree[] = $parent;
}

$itemUrl = implode('/', array_reverse($itemTree));

是的,您已经生成了网址!

对于步骤2

在.htaccess中,将所有URL都无一例外地重定向到page.PHP,如下所示(我希望您可以拥有比page.PHP更好的名称,或者至少有一个root脚本有意义的index.PHP).

RewriteRule ^(.*)$index.PHP?path=$1 [NC,L,QSA] 

就像@Vrac写道.

然后在index.PHP中像@Vrac那样写:

$path = $_GET('path');
$patharray = explode('/',$path);
//do processing based on contents of patharray 
$category = $patharray[0];
$product = $patharray[1];
//etcetera, etcetera...
//serve up content based on the path that was requested

您已经完成!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐