处理更改的 URL

Handling URLs that change

如果示例网站包含用户创建的博客 post,这将是为每个 post:

构建 URL 的简单方法
www.example.com/jane-smith/my-first-blog-post

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

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

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

一种常见的方法是包含一个永不更改的唯一 ID(对于用户和 post,在您的情况下),然后 301 重定向到 current/canonical 变体。

例子

例如,Stack Overflow 就是这样做的。

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

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

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

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

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

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

缺点

不是最好的URL design:

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

备选

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

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

因此,对于每个用户,您可以跟踪以前的用户名,以及每个 post 以前的标题,然后 301 重定向到 current/canonical 一个。