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

您已经完成!

上一篇:php-.htaccess中的RewriteRule有问题


下一篇:php-使用htaccess从URL中删除文件夹名称