【问题标题】:Handling URLs that change处理变化的 URL
【发布时间】:2016-07-27 13:30:03
【问题描述】:

如果示例网站包含用户创建的博客文章,这将是一种为每个文章构建 URL 的简单方法:

www.example.com/jane-smith/my-first-blog-post

如果用户要更改其用户名(每个用户唯一)或博客文章的标题,则必须更改 URL 才能更新。例如,如果上述用户更改了她的用户名,则 URL 可能是这样的:

www.example.com/jane-wilson/my-first-blog-post

现在出现了一个问题,好像人们尝试使用旧 URL,但它不起作用。在不删除更改用户名或博客文章名称的功能的情况下,如何避免或解决现有网站的这种情况?

【问题讨论】:

  • 如果两个用户的名字完全相同会怎样?
  • 您可以使用重定向。当用户点击旧 URL 时,只需将他们重定向到新 URL。但是,我建议您研究 REST 服务和最佳 REST URL 实践;根据您的问题,我认为这会对您有所帮助。
  • @Lashane 我刚刚编辑了这个问题,以反映使用用户名而不是名称的更好示例。
  • 您可以跟踪用户的名称更改历史,也可以跟踪博客文章名称的更改。然后,在返回 404 错误之前,尝试查看该历史记录并给它第二次机会。 :D
  • @HuyTran 如果有人想使用用户名怎么办?它会变得多余

标签: url url-design


【解决方案1】:

一种常见的方法是包含一个永远不会更改的唯一 ID(对于用户和帖子,在您的情况下),然后 301 重定向到当前/规范变体。

示例

这就是例如 Stack Overflow 正在做的事情。

如果您更改问题的标题,则 ID (36463097) 将保留,slug 将更改:

  1. https://stackoverflow.com/questions/36463097/handling-urls-that-change
  2. https://stackoverflow.com/questions/36463097/handling-urls-that-might-change

如果您更改用户名,则 ID (2961662) 将保留,并且 slug 将更改:

  1. https://stackoverflow.com/users/2961662/psidhu
  2. https://stackoverflow.com/users/2961662/john-doe

这也允许拥有相同用户名的用户(如果你想允许的话):

  • http://example.com/23/john-doe
  • http://example.com/42/john-doe

缺点

这不是最好的URL design

  • /users/2961662/psidhu不如/users/psidhu漂亮
  • 记住具有如此神秘 ID 的 URL 很难(呃)
  • 这样的 ID 没有意义,所以理想情况下它不会是 URL 的一部分

另类

跟踪所有更改并阻止曾经注册的用户名。因此,如果我以john 开头,然后将我的名字更改为john-doe,则其他人将无法注册john

这对于电子邮件地址来说是一种很好的做法,我认为这对于允许与用户直接通信的每项服务也应该是一种很好的做法。如果用户收到的消息是发给该用户名的前任所有者的,那将是一个严重的问题;如果用户因为其他人之前注册而没有得到他们最喜欢的用户名,那最多就是烦人。

因此,对于每个用户,您可以跟踪以前的用户名,并为每个帖子以前的标题,然后 301 重定向到当前/规范的。

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 2016-11-25
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多