3

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

http://example.com/randomstring

正在谷歌上显示所有数据

http://example.com/

所以在我看来,有两种解决方案。一种是每当有人访问主 URL 的子 URL 时添加一个 301 重定向,并将他们重定向到父 URL,或者只是给出一个 404,并带有一个很好的消息,“也许你的意思是parent-url ”。

想法?我很确定我知道我想将它们发送到哪里,但是正确的网络礼仪是什么?404 还是 301?

4

5 回答 5

8

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

301 用于移动的东西,这里不是这种情况。

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

但是,您永远不应该在不让用户知道发生了重定向的情况下进行重定向。这使用户感到困惑,以为可能有问题。

于 2010-01-01T23:57:17.157 回答
3

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

10.3.2 301 永久移动

请求的资源已被分配一个新的永久 URI,并且任何将来对该资源的引用都应该使用返回的 URI 之一。如果可能,具有链接编辑功能的客户端应该自动将对 Request-URI 的引用重新链接到服务器返回的一个或多个新引用。除非另有说明,否则此响应是可缓存的。

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

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

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

10.4.5 404 未找到

服务器未找到任何与请求 URI 匹配的内容。没有说明这种情况是暂时的还是永久性的。如果服务器通过一些内部可配置的机制知道旧资源永久不可用并且没有转发地址,则应该使用 410 (Gone) 状态代码。当服务器不希望确切地揭示请求被拒绝的原因或没有其他响应适用时,通常使用此状态代码。

当然,对于这些事情,通常的用法往往优先于 RFC 的实际文本。如果整个世界都在以一种方式进行操作,那么指向文档并没有多大帮助。

于 2010-01-02T00:07:33.110 回答
2

我会说 404 是正确的做法,因为该位置从来没有有意义的资源,所以没有任何东西“永久移动”(这就是 301 的含义)并且客户端需要知道他们的 URL 是错误的并且不仅在此期间发生了变化。

但我还不太明白问题是什么。Google 是否通过随机 URL 请求访问您的网站?那会很奇怪。还是您的网站显示的结果domain.com/randomstring与 for相同domain.com/index.html?你应该改变,我认为是 404。

于 2010-01-01T23:57:33.000 回答
0

如果你知道他们应该去哪个 URL,这正是 301 的用途。

于 2010-01-01T23:56:18.420 回答
0

那么您是说您的网站在不受您控制的情况下进行重定向?

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

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

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

于 2010-01-02T00:05:28.417 回答