漂亮的链接与NO id

时间:2009-10-09 02:59:45

标签: php mysql mod-rewrite friendly-url

我正在考虑为新网站实施漂亮的链接。

我理解如何使基础工作,例如:

/视图/ postTitle / 7895

我可以拿起ID 7895而忽略标题。

但是,我发现有些网站完全摆脱了ids:

/视图/ postTitle

这是如何运作的?

我能想到的唯一方法是,在每个请求中,pageTitle都是作为字符串发送的,而某些代码会进行一些SQL检查以返回正确的id。但是,这意味着很多潜在的昂贵的SQL查询没有?特别是当你有很多帖子时。

此外,这意味着每次有人创建帖子时,我都需要为该帖子生成一个唯一的,符合网址的字符串。我需要检查数据库,直到我得到一个独特的数据库。这一切似乎都太多了?

我看错了吗?或者是否有现成的API和工具来使这更容易和更有效?

我正在使用PHP / MySQL,Apache。

由于

3 个答案:

答案 0 :(得分:2)

创建一个标准化/清理帖子标题的函数 - 一种简单的方法可能是对原始标题的urlencode()表示进行哈希处理。将其存储为“id”而不是db生成的数值,并且您的SQL不需要显着更改。

答案 1 :(得分:1)

你是对的。您必须处理两个方面。

首先,当有人提交帖子时,您会生成一个html友好的URL,用于添加到每个链接。实际上,这并不太难。您需要替换空格,特殊字符等。基本上,无论您为数据库存储做什么转义都是一个很好的起点。您还需要确保这些唯一

其次,当有人使用链接点击您的网站时,您需要正确解决它。如果您将每个唯一生成的URL视为一个id,那么这个有点复杂,但可以有效地工作,因为它实际上就是它...如果您查询它(转义当然!)。

对于一个可靠的实现,大多数CMS - WordPress和Drupal浮现在脑海中 - 非常有效地处理这个问题。来自Drupal的背景,我建议你看一下“路径”和“pathauto”模块,了解如何通过专注于“路径”来完成...它涵盖了问题的两半。

答案 2 :(得分:0)

你有正确的方法。 通常情况下,如果它是一个带帖子的简单CMS,请使用WordPress之类的软件包,并根据您的需要进行修改。 如果您有自定义数据类型,我强烈推荐SilverStripe,如果您想使用用户,请使用Drupal。 浮动的库和函数可以将帖子标题转换为URL,这也是一个好主意。 开源很棒,你可以看看其他人是如何做到的,尝试搜索github等等。