我的网站有一个文章列表,每篇文章都未发表并多次发布。
当发布的标志关闭(0)时,文章将不再可访问。
当文章不再可访问时,我将用户重定向到主页,我尝试使用301重定向:
header("Location: /", true, 301);
当文章发布,然后未发布,然后再次发布时,这会导致问题,浏览器似乎将未发布的重定向缓存到主页,您无法再查看该文章 - 即使它已将发布的标志设置为1
所以我尝试了302:
header("Location: /", true, 302);
但我一直在读,不建议使用这个。
有没有更好的方法来实现这一目标?
答案 0 :(得分:2)
您不恰当地使用HTTP代码。
重定向标题(301,等)旨在表明所请求的内容确实存在且可以访问,它只是不在请求的位置。如果您未发布文档,则无法从任何位置访问该文档。在这种情况下发送3XX重定向代码是错误的,因为您误导了浏览器和其他用户代理,例如Google的机器人。
您应该发送一个代码,指示内容不再可用(410 Gone,403 Forbidden或404 Not Found)并显示错误页面。如果您愿意,该错误页面可以是主页的副本,但出于可用性原因,我建议不要这样做。告诉别人内容不再可用而不仅仅是重定向到主页更好。
顺便说一句,302不再意味着"暂时移动",现在意味着"找到"。临时重定向的正确HTTP代码现在是303("请参阅其他")。