Php 没有id的漂亮链接

Php 没有id的漂亮链接,php,mysql,mod-rewrite,friendly-url,Php,Mysql,Mod Rewrite,Friendly Url,我正在考虑我的选择,为一个新网站实现漂亮的链接 我了解如何使基础工作正常进行,例如: /视图/postTitle/7895 我只需拿起id 7895,忽略标题即可 然而,我看到一些网站完全摆脱了ID: /视图/postTitle 这是怎么回事 我能想到的唯一方法是,在每个请求中,pageTitle都作为字符串发送,一些代码执行一些SQL检查以返回正确的id。然而,这将意味着大量可能昂贵的SQL查询否?尤其是当你有很多帖子的时候 而且,这意味着每次有人创建一篇文章时,我都需要为该文章生成一个唯一的

我正在考虑我的选择,为一个新网站实现漂亮的链接

我了解如何使基础工作正常进行,例如:

/视图/postTitle/7895

我只需拿起id 7895,忽略标题即可

然而,我看到一些网站完全摆脱了ID:

/视图/postTitle

这是怎么回事

我能想到的唯一方法是,在每个请求中,pageTitle都作为字符串发送,一些代码执行一些SQL检查以返回正确的id。然而,这将意味着大量可能昂贵的SQL查询否?尤其是当你有很多帖子的时候

而且,这意味着每次有人创建一篇文章时,我都需要为该文章生成一个唯一的、url友好的字符串。我需要检查数据库,直到我得到一个唯一的。这一切似乎太多了不

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

我使用的是PHP/MySQL,Apache


谢谢

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

创建一个函数来规范化/清理帖子标题-一个简单的方法可能是散列原始标题的urlencode()表示形式。将其存储为“id”而不是db生成的数值,您的SQL不需要进行重大更改。

您是正确的。有两个方面你必须处理

首先,当有人提交帖子时,您可以生成一个html友好的URL以添加到每个链接中。事实上,这并不难。您需要替换空格、特殊字符等。基本上,对于数据库存储所做的任何转义都是一个很好的起点。您还需要确保这些是唯一的

第二,当有人用链接点击你的网站时,你需要正确地解决它。这个有点复杂,但如果您将每个唯一生成的URL看作一个id,则可以有效地执行相同的操作,因为它本质上就是这样的。。。如果你对它有疑问(当然了!)


对于一个可靠的实现,大多数CMS——WordPress和Drupal——都能非常有效地处理这个问题。来自Drupal的背景,我建议您关注“路径”和“路径自动”模块,了解如何实现这一点,重点关注“路径”。。。它涵盖了问题的两个方面。

这并不意味着要进行更多的查询-如果您有一个按id选择的id,如果您有一个按post\u url选择的post url。此外,如果您为post_url列编制索引,它不会比按id选择慢多少。