存储唯一 URL Slug 的最佳方式是啥?
Posted
技术标签:
【中文标题】存储唯一 URL Slug 的最佳方式是啥?【英文标题】: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 不会改变。
无论如何,我想知道其他人之前是否已经解决了这个问题并找到了解决方法?
【问题讨论】:
【参考方案1】:我有点喜欢 *** 的做法。即将both ID 和 slug 放入 url。现在蛞蝓不再是唯一的。我相信 hulu.com 也是这样做的。我认为这是解决问题的实用方法。
【讨论】:
@toby *** 实际上似乎将 URL 的 slug 部分仅用于 seo 目的(也许还有其他我不知道的原因)。我这样说是因为对于任何给定的问题,URL ***.com/questions/434376/title-of-post 和 ***.com/questions/434376 和 ***.com/questions/434376/total-random-gobblygoo 都解析为 URL 中引用的特定问题 ID。【参考方案2】:大多数网站不会更改 slug,因为如果用户编辑她的标题,它不应该破坏任何指向已经创建的帖子的链接。
【讨论】:
回复确实很晚,但解决方案是将以前的标题/slugs 存储在数据库中并创建一个脚本以 301 重定向到最新版本 匹配所有路由可能会很慢【参考方案3】:对于您已经拥有的数据库解决方案,如果它运行良好,您还可以使用更新触发器来在内容更改时更新 slug,但您应该寻找性能损失。
对于替代解决方案,您可以使用地图 [在启动时加载,包含现有 slug],其中包含作为 slug 的键和作为值的现有计数。每次生成 slug 时,确定现有值并将高于它的值附加到表中,然后更新地图。
【讨论】:
【参考方案4】:您可以为每个帖子使用 slug 的集合(带有帖子链接的单独表格),并确定一个实际上是最新的。您的帖子应存储当前帖子的 id,例如将其用于 SEO 作为规范。它还将受益于更改 slug 以进行更好的 SEO 优化。如果您不想使用 SEO - 您可以做任何您想做的事情(只需存储一个 slug),它会很好。有很多策略可以达到它的独特性。 要通过索引在 DB 中执行相同的 slug 快速搜索,请使用“my_slug%”并从结果中构建唯一的(例如添加帖子的 id)。如果结果为空 - 继续保存。
但是,如果您使用 slug 集合 - 不要忘记让这些 url 可以从互联网访问
【讨论】:
以上是关于存储唯一 URL Slug 的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章