何时显示404与301?

时间:2010-01-01 23:53:59

标签: http-status-codes

所以我一直注意到谷歌如何浏览我们网站的一些奇怪的结果。一个问题是这样的网址:

http://example.com/randomstring

正在谷歌上显示

的所有数据
http://example.com/

所以在我看来有两种解决方案。一种是每当有人访问主要网址的子网址时添加301重定向,并将其重定向到父网址,或者只是给出一条404,其中有一条很好的消息说:“也许你的意思是 parent-url < / EM>”。

思考?我很确定我知道我想把它们送到哪里,但是什么是正确的网络礼仪? 404或301?

5 个答案:

答案 0 :(得分:8)

正确的http方式是404,只要请求不存在的东西

301适用于移动的内容,但这不是这种情况。

然而,今天很少遵循100%正确的http约定。根据上下文,将用户重定向到主页可能很有用,并通知未找到页面并重定向它们。虽然在这种情况下您应该使用303 See Other代码。

但是,在不让用户知道重定向发生的情况下,您应该从不重定向。这让用户感到困惑,认为可能出现了问题。

答案 1 :(得分:3)

已发布的答案很好地涵盖了您的问题,但我认为转到源代码可能有一些价值:rfc 2616

  

10.3.2 301永久移动

     

已为所请求的资源分配了一个   新的永久URI和任何未来   对这个资源的引用应该使用   返回的URI之一。客户有   链接编辑功能应该   自动重新链接引用   Request-URI到一个或多个   服务器返回的新引用,   在可能的情况。这个回应是   可缓存,除非另有说明。

     

应该给出新的永久URI   通过响应中的位置字段。   除非请求方法是HEAD,   响应的实体应该   包含一个简短的超文本注释   指向新URI的超链接。

     

如果收到301状态代码   响应GET以外的请求   或HEAD,用户代理不得   自动重定向请求   除非可以通过确认   用户,因为这可能会改变   请求的条件   发行。

     

注意:在自动重定向POST请求之后      接收301状态代码,一些现有的HTTP / 1.0用户代理      将错误地将其更改为GET请求。

     

10.4.5 404 Not Found

     

服务器找不到与之匹配的内容   Request-URI中。没有任何迹象表明   条件是暂时的还是   常驻。 410(Gone)状态代码   如果服务器知道,应该使用   通过一些内部可配置   机制,旧资源   永久不可用,没有   转发地址。此状态代码   通常在服务器执行时使用   不希望透露具体原因   请求已被拒绝,或者当没有   其他答复也适用。

当然,通过这些事情,常见的用法优先于RFC的实际文本。如果整个世界都是单向的,那么指向一个文档并没有多大帮助。

答案 2 :(得分:2)

我说404是正确的做法,因为该位置从未有过有意义的资源,所以没有任何“永久移动”(301的含义),客户需要知道他们的URL是错误的,并且在此期间并没有改变。

但我还不太清楚问题是什么。 Google是否通过随机网址请求访问您的网站?那会很奇怪。或者,您的网站显示domain.com/randomstringdomain.com/index.html相同的结果?你应该改变,用404来解决。

答案 3 :(得分:0)

如果你知道他们应该去哪个网址,那就是301的用途。

答案 4 :(得分:0)

您是说您的网站在没有您控制权的情况下进行重定向?

当您想要使用301(永久重定向)时,该页面最初存在但已移动到其他位置。这是“地址卡的变更”。重组网站时的巨大救星。如果页面只是一些古怪的随机URL,那么传递404就会告诉蜘蛛(也是人类,但人们做的更少),这个页面从来就不存在,所以不要再回来浪费我的网络服务器时间。有些人不同意这一点,因为他们从不希望用户看到404页面。我认为这些代码是出于充分的理由而开发的,并且被搜索引擎很好地使用。

传递这些状态代码中的任何一个都不会阻止您提供“友好页面”(尽管如果浏览器允许,301通常只会重定向您)。

要记住的是,Google不喜欢重复的内容,因此您需要确保您的网站似乎没有使用不同的网址提供相同的内容。