我有一个相当复杂的内容管理系统,我用PHP编写,它有无限的分层类别。htaccess:重写无限子目录
每个类别有我与mod_rewrite的使用,以产生干净URL的短名称(从类别标题动态生成的),例如
http://www.mysite.com/categories/january
这种方法的问题是,每个类别需要唯一它的正式工作的简称。当我有多个具有相同名称的类别时,这会产生一个问题,并带有不同的类别,例如, /类别/ 2011/1月和/类别/ 2010/1月。
解决这个问题的最简单方法是在创建重复短名称时追加-1,-2等,但我更愿意在URL中使用整个类别层次结构并根据此确定正确的Ids,例如
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
具有相同的代码,并给我的PHP页面它们在URL中规定的顺序这些类别的阵列?
然后,我的代码需要从最后一个类别开始向后工作,根据它的父母找出需要哪个类别。
这是什么,这将是可行的(实际上推荐),任何人都可以给我一个手生产用于重写命令正确的正则表达式,因为我正则表达式的漂亮无望的把握?
很多感谢 尼克
这应该是足够的(没有必要昂贵的'preg_ *'函数):'$ splittedCat = explode('/',$ cat);'。但在整体 - 我不同意,这样的路由好得多在PHP实现,因为Apache的mod_rewrite最有可能将无法很好地实现这一点(一个可能的方法是太循环吧'[N]'...但它不够安全/足够灵活 - 需要很多真实示例测试)。我知道肯定 - 这可以通过使用'赫利的ISAPI_Rewrite 3'(其中模仿的mod_rewrite)我做到了我自己(它具有循环的特殊标志)来完成..但它要在Windows上使用IIS。 +1 – LazyOne
感谢jCoder - 出于某种原因,传递整个类别字符串在PHP中进行拆分的简单原则完全逃脱了我!这应该是一个很好的解决方案。 – Nick