什么是存储唯一URL Slug的最佳方法?

7

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

现在,我已经制作了自己的slug方法,所以我不需要一些代码。

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

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

例如。

在表中找到5条记录具有相同的用户生成内容。 现在,这个slug是slug-text,末尾加上6。

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

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

4个回答

18

我有点喜欢stackoverflow的做法。就是将 ID和slug同时放入url中。现在slug不再必须是唯一的。我认为hulu.com也是这样做的。我认为这是解决问题的切实可行的方法。


3
Stackoverflow似乎只是将URL的slug部分用于SEO目的(也许还有其他我不知道的原因)。我这么说是因为对于任何给定的问题,URL https://dev59.com/V0bRa4cB1Zd3GeqPyDWy 和 https://dev59.com/V0bRa4cB1Zd3GeqPyDWy 和 https://dev59.com/V0bRa4cB1Zd3GeqPyDWy/total-random-gobblygoo 都会解析到与URL中引用的特定问题ID相应的那个问题。 - Howiecamp

3

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


1
非常晚的回复,但解决此问题的方法是在数据库中存储先前的标题/短语,并创建一个脚本来进行301重定向到最新版本。 - Wildcard27
匹配所有路由可能会非常缓慢。 - Archit Saxena

0

针对您已经拥有的数据库解决方案,如果它运行良好,您可以添加一个更新触发器来在内容更改时更新 slug,但是您应该考虑性能问题。

另一种解决方案是,您可以使用一个映射表[在启动时加载包含现有 slug],其中键为 slug,值为现有计数。每次生成 slug 时,确定现有值并将其附加到表中高于该值的值,然后更新映射表。


0
你可以为每个帖子使用一个包含帖子链接的单独表格的集合(slug),确定实际当前使用的表格。例如,您的帖子应该存储当前帖子的ID,以便将其用作规范化的SEO。更改slug也有助于进行更好的搜索引擎优化。如果您不想使用SEO,则可以按照自己的方式处理(只需存储单个slug),这也是不错的选择。有很多策略可以实现唯一性。
要通过索引在数据库中快速搜索相同的slug,请使用“my_slug%”,并从结果构建唯一的slug(例如添加帖子ID)。如果结果为空,则继续保存。
但是,如果您使用slug集合,请不要忘记使这些URL可以从互联网访问。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接