我有一个相当复杂的内容管理系统,我用PHP编写,它有无限的分层类别。
每个类别都有一个短名称(从类别标题动态生成),我使用mod_rewrite生成干净的URL,例如
http://www.mysite.com/categories/january
这种方法的问题是每个类别都需要一个唯一的短名称才能正常工作。当我有多个具有相同名称且具有不同类别的类别时,这会产生问题。 / categories / 2011/1月和/ categories / 2010/1月。
最简单的方法是在创建重复的短名称时附加-1,-2等,但我更希望在URL中使用整个类别层次结构并根据此确定正确的ID,例如
http://www.mysite.com/categories/2011/january vs http://www.mysite.com/categories/2010/january
我的问题是:有没有办法可以使用mod_rewrite来解析任意数量的子类别,并将这些子类别返回到我的php页面,可能是一个值数组?
无论子类别的数量如何,它都需要工作,因此它可以处理,例如。
http://www.mysite.com/categories/products/sheds/reports/2011/january
使用相同的代码,并按照URL中显示的顺序为我的php页面提供这些类别的数组?
然后我的代码需要从最后一个类别向后工作,以根据父母的身份确定需要哪个类别。
这是否可行(并且确实推荐),并且任何人都可以帮我为重写命令生成正确的正则表达式,因为我对正则表达式毫无希望的掌握?
非常感谢提前 尼克
答案 0 :(得分:3)
我认为没有任何简单的方法让mod_rewrite为您分割数据。当然,您可以构建一个匹配多达9个虚拟路径的RewriteRule
,但我不认为这会有所帮助。相反,我建议定义像这样的规则
RewriteRule ^categories/(.*)$ category-handler.php?cat=$1
然后在PHP文件中进行拆分(和重新排序),类似这样
$cat = $_GET['cat'];
$splittedCat = array_reverse(preg_split('/\//', $cat));