【问题标题】:What is the best way to store a unique URL Slug?存储唯一 URL Slug 的最佳方式是什么?
【发布时间】:2010-09-30 20:48:45
【问题描述】:

我正在尝试为我的网站生成一些 url 'slugs'。它基于一段用户生成的文本。

现在,我已经制作了自己的 slug 方法,所以我不会为此编写一些代码。

我想知道的是哪里是确定这个 slug 是否唯一然后插入它的最佳位置,因为 slug 字段是唯一键索引。

最初,我在任何插入(针对表)上都有一个触发器,因此当输入数据时,然后确定 slug。我有一个函数检查包含用户文本(不是 slug)的记录数,然后生成 slug 并将记录计数 + 1 添加到新 slug 的末尾。

例如。

在表中找到 5 条记录,它们具有相同的用户生成内容。 用于此的 slug 现在是在末尾添加 6 的 slug-text。

缺陷:如果用户改变他们的文本,slug 不会改变。

无论如何,我想知道其他人之前是否已经解决了这个问题并找到了解决方法?

【问题讨论】:

    标签: database url slug


    【解决方案1】:

    我有点喜欢 stackoverflow 的做法。即将both ID 和 slug 放入 url。现在蛞蝓不再是唯一的。我相信 hulu.com 也是这样做的。我认为这是解决问题的实用方法。

    【讨论】:

    【解决方案2】:

    大多数网站不会更改 slug,因为如果用户编辑她的标题,它不应该破坏任何指向已经创建的帖子的链接。

    【讨论】:

    • 回复确实很晚,但解决方案是将以前的标题/slugs 存储在数据库中并创建一个脚本以 301 重定向到最新版本
    • 匹配所有路由可能会很慢
    【解决方案3】:

    对于您已经拥有的数据库解决方案,如果它运行良好,您还可以使用更新触发器来在内容更改时更新 slug,但您应该寻找性能损失。

    对于替代解决方案,您可以使用地图 [在启动时加载,包含现有 slug],其中包含作为 slug 的键和作为值的现有计数。每次生成 slug 时,确定现有值并将高于它的值附加到表中,然后更新地图。

    【讨论】:

      【解决方案4】:

      您可以为每个帖子使用 slug 的集合(带有帖子链接的单独表格),并确定一个实际上是最新的。您的帖子应存储当前帖子的 id,例如将其用于 SEO 作为规范。它还将受益于更改 slug 以进行更好的 SEO 优化。如果您不想使用 SEO - 您可以做任何您想做的事情(只需存储一个 slug),它会很好。有很多策略可以达到它的独特性。 要通过索引在 DB 中执行相同的 slug 快速搜索,请使用“my_slug%”并从结果中构建唯一的(例如添加帖子的 id)。如果结果为空 - 继续保存。

      但是,如果您使用 slug 集合 - 不要忘记让这些 url 可以从互联网访问

      【讨论】:

        猜你喜欢
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-20
        • 2011-05-07
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多