一种常见的方法是包含一个永远不会更改的唯一 ID(在您的情况下,对于用户和帖子),然后 301 重定向到当前/规范变体。
例子
这就是例如 Stack Overflow 正在做的事情。
如果您更改问题的标题,则 ID ( 36463097
) 将保留并且slug将更改:
https://stackoverflow.com/questions/36463097/handling-urls-that-change
https://stackoverflow.com/questions/36463097/handling-urls-that-might-change
如果您更改用户名,则 ID ( 2961662
) 将保留并且 slug 将更改:
https://stackoverflow.com/users/2961662/psidhu
https://stackoverflow.com/users/2961662/john-doe
这也允许拥有相同用户名的用户(如果你想允许的话):
http://example.com/23/john-doe
http://example.com/42/john-doe
缺点
这不是最好的URL 设计:
/users/2961662/psidhu
不如美丽/users/psidhu
- 记住具有如此神秘 ID 的 URL 很难(呃)
- 这样的 ID 没有意义,所以理想情况下它不会是 URL 的一部分
选择
跟踪所有更改并阻止曾经注册的用户名。因此,如果我以 as 开头john
,然后将我的名字更改为john-doe
,其他人将无法注册john
。
这对于电子邮件地址来说是一种很好的做法,在我看来,这对于允许与用户直接通信的每项服务也应该是一种很好的做法。如果用户收到的消息是发给该用户名的前任所有者的,那将是一个严重的问题;如果用户没有得到他们最喜欢的用户名,因为其他人之前注册了它,那最多是烦人的。
因此,对于每个用户,您可以跟踪以前的用户名,并为每个帖子以前的标题,然后 301 重定向到当前/规范的。