如何将网址分成多个可用的类别或文章
在PHP中,我试图编写一篇文章部分。一个完全虚构的文章网址将在格式:如何将网址分成多个可用的类别或文章
http://www.example.com/articles/fix/appliances/how-to-repair-a-microwave/
我所得到挂了是如何让这个我可以使网址的每一部分正确显示所需要的数据和如果他们添加了格式不正确的任何内容,则它的状态页面不存在。
例如,如果访问者去了http://www.example.com/articles/它将显示所有文章的列表。如果他们去http://www.example.com/articles/fix/它将只显示固定类别下的文章。如果他们去http://www.example.com/articles/fix/appliances/它将只显示固定设备类别下的文章等。
我可以爆炸$ _SERVER ['REQUEST_URI']来评估我应该执行的PHP代码中的哪个函数。例如显示一个Feed或显示一个类别。
$match = explode('/', $_SERVER['REQUEST_URI']);
switch($match[2]) {
case 'feed':
show_rss();
break;
default:
show_category();
break;
}
虽然我的困惑是如何区分类别和实际文章。在show_category()函数中,我可以获取url路径的最后部分,并检查数据库以查看是否存在使用该路径的文章。如果是这样,展示文章,否则假设它是一个类别。不过,我不确定这是否是最有效的方法。
我打算假设您正在以适当方式访问您的脚本,以便脚本从单个通用位置运行,但访问所需数据的最佳方式是从$_SERVER['REQUEST_URI']
。就我个人而言,我会使用mod_rewrite,但这与您的问题不同。
既然你提供的链接,这些网页上,你可以附加上你的文章密钥的扩展:http://www.example.com/articles/fix/appliances/how-to-repair-a-microwave.article/
如果一个破折号会永远存在于本文的重点,但从来没有在一个类别键,你可以preg_match为破折号。
否则,你几乎设置检查每个关键对数据库。但是,我会这样做,是针对类别数据库运行每个条目。据推测,如果它是一个文章键,它不会与类别表匹配,然后您可以尝试将其与文章表相匹配。这将比每次对文章表进行匹配更有效。
编辑:实际上更合适的说,检查最常用的表更有效。如果用户会更频繁地访问类别导航页面,则应该尝试将最后一个键匹配到类别表。如果人们更频繁地浏览文章页面,那么您应该首先检查文章页面。这只是看你的服务器日志和适当的反应。
是的,任何对http://www.example.com/articles/的调用都会被重定向到/articles/index.php,它将处理需要执行的功能。当你说你会使用mod_rewrite的时候,你的意思是把所有的请求都传送给一个单独的文件或者将它分解成多个类别? 我不想把自己限制在文章名中的破折号,所以不能做preg_match。我已经想过为文章url添加一个标识符,但是如果可能的话,我想避免这种情况。正在寻找一个类似于wordpress的网址,它可以被分成不同的类别。 – 2012-03-25 19:26:10
mod_rewrite是一个apache模块,通常在大多数Web主机上都可用,它提供了一种将所有请求管理到单个文件的方法。它还允许你以'$ _GET'参数的形式访问你正在处理的URL部分,而不是通过'$ _SERVER ['REQUEST_URI']'来访问它。它不会解决你的问题,但它是一种更普遍接受的做事方式,而不是它看起来(从你提供的有限信息),就像你正在做的那样,专门用来将一组请求重定向到单个文件。 – Jason 2012-03-25 23:46:28
如果链接到类别的键和链接到文章的键之间没有区别,那么您的唯一途径是检查数据库以查看哪个是哪个。我已经更新了我的答案,以澄清如何选择如何以及在哪里检查数据库。 – Jason 2012-03-25 23:52:21
我建议看看mod_rewrite。你是否反对这个方法?或者你是否已经投入了太多的方法? – qitch 2012-03-25 20:49:52
我不知道谁mod_rewrite会解决这个问题。你有一个例子吗? – 2012-03-25 23:41:23