【问题标题】:Using a 301/302 Redirect使用 301/302 重定向
【发布时间】:2014-08-11 16:52:24
【问题描述】:

我的网站有一个文章列表,每篇文章都未发表并多次发表。

当已发布标志关闭 (0) 时,该文章不再可访问。

当文章不再可访问时,我将用户重定向到主页,我尝试使用 301 重定向:

header("Location: /", true, 301);

当一篇文章被发布,然后取消发布,然后再次发布时,这会导致问题,浏览器似乎缓存了未发布的重定向到主页,您无法再查看该文章 - 即使它的已发布标志设置为 1 .

所以我尝试了 302:

header("Location: /", true, 302);

但我一直在阅读,不建议使用它。

有没有更好的方法来实现这一点?

【问题讨论】:

  • 301 是“移动永久”,所以浏览器会很自然地记住这一点。我建议改用 404。
  • 在尝试再次访问链接或什至不同的浏览器之前尝试清除浏览器缓存
  • @insanebits 我不能让每个用户都这样做
  • 如果内容已经发布,你不应该从网站上删除,这就是为什么 wordpress 有发布状态草稿的原因,你在发布之前处理内容,只有当内容必须永久删除时,你才应该添加 301,否则使用 404,这是表示未找到内容的自然方式。

标签: php


【解决方案1】:

您不恰当地使用了 HTTP 代码。

重定向标头(301 等)旨在表明请求的内容确实存在并且可以访问,只是不再位于请求的位置。如果您未发布文档,则无法从任何位置访问它。在这种情况下发送 3XX 重定向代码是错误的,因为您误导了浏览器和其他用户代理,例如 Google 的机器人。

您应该发送一个指示内容不再可用的代码(410 已消失、403 禁止或 404 未找到)并显示错误页面。如果您愿意,该错误页面可能是主页的副本,但出于可用性原因,我建议您不要这样做。告诉人们内容不再可用比仅仅重定向到主页更好。

顺便说一句,302 不再是“暂时移动”的意思,现在是“找到”的意思。临时重定向的正确 HTTP 代码现在是 303(“查看其他”)。

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2012-03-10
    • 1970-01-01
    • 2016-06-21
    • 2014-09-19
    • 2011-07-21
    • 2013-11-26
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多