【问题标题】:pretty links with NO id没有 id 的漂亮链接
【发布时间】:2010-12-05 05:21:42
【问题描述】:

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

我了解如何使基础工作发挥作用,例如:

/view/postTitle/7895

我可以直接拿起 id 7895 而忽略标题。

但是,我看到一些网站设法完全摆脱了 id:

/view/postTitle

这是如何工作的?

我能想到的唯一方法是,在每次请求时,pageTitle 都会作为字符串发送,并且一些代码会执行一些 SQL 检查以返回正确的 id。然而,这意味着很多潜在的昂贵的 SQL 查询不是吗?尤其是当您有很多帖子时。

另外,这意味着每次有人创建帖子时,我都需要为该帖子生成一个唯一的、对 url 友好的字符串。我需要检查数据库,直到我得到一个唯一的。这一切似乎都太过分了??

我看错了吗?或者是否有现成的 API 和工具可以让这变得更轻松、更高效?

我正在使用 PHP / MySQL、Apache。

谢谢

【问题讨论】:

  • 这并不意味着更多的查询 - 如果您有一个通过 id 选择的 id,如果您有一个通过 post_url 选择的帖子 url。此外,如果你索引你的 post_url 列,它不会比按 id 选择慢很多。

标签: php mysql mod-rewrite friendly-url


【解决方案1】:

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

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

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

对于一个可靠的实现,大多数 CMS —— WordPress 和 Drupal 都会浮现在脑海中—— 非常有效地处理这个问题。来自 Drupal 背景,我建议您查看“路径”和“路径自动”模块,以了解这是如何完成的,重点是“路径”......它涵盖了问题的两半。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 2015-11-08
        • 2013-03-26
        相关资源
        最近更新 更多