我最近进行了一个项目,将旧的购物车网站(定制开发)转换为现代的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.
而且,无论是类别还是对象,它们都具有一个类别作为父类别,或者根类别为null.
在页面中为类别或产品生成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
您已经完成!