这是一个理论问题。假设我有一个公共用户个人资料页面:
mypage.com/users/1
在访问路由/users/{id}
之前,我检查用户(因此,资源)是否存在。如果没有,我会重定向到主页:
$user = User::find($id);
if (!isset($user)) {
return Redirect::to('/');
}
现在,当用户不存在时,Chrome开发者工具的网络标签会返回302 Found
状态,然后会重定向到主页。
这是正确的状态吗?如果没有,我应该将哪种代码传递给重定向以提供缺少资源的信息?我不认为它应该是404
,因为路由本身可能是正确的(如/users/12242343534657
),所以 - 从技术上讲 - 页面可能存在。这只是被请求的数据 - 不是。
您对此问题的体验是什么?
答案 0 :(得分:1)
所有重定向都必须使用3xx状态代码。 Here's a list of them
在您的情况下,可能是302(或301,但这将被浏览器永久缓存,这可能会成为一个问题)
但是,你真的应该重定向到主页吗?我认为没有。当然这只是我的观点,但显示404页面是非常常见的做法。 (这并不代表错误的路线,但未找到)
有些情况下,重定向会损害用户体验。想象一下,您手动输入了网站的地址,如:
example.com/usr/lukasgeiter
正如您可能已经注意到的那样,我写错了user
。通过重定向,我必须再次输入所有内容。如果您留在网站上并显示错误消息,我可以更正拼写错误并加载正确的页面。
对于用户来说,这样做会更加清楚。显然,您可以在错误页面上放置一个很大的主页链接,以便用户知道下一步该做什么;)