由于浏览器缓存,PHP 标头 301 重定向不起作用

Posted

技术标签:

【中文标题】由于浏览器缓存,PHP 标头 301 重定向不起作用【英文标题】:PHP header 301 redirect not working due to browser cache 【发布时间】:2013-11-27 19:37:54 【问题描述】:

我的代码如下:

<?php 
header("HTTP/1.1 301 Moved Permanently"); 
header("Location: http://newsite.com/"); 
?>

我遇到的问题是一些用户已经报告该页面没有重定向他们,而是向他们显示旧页面上的内容,但在当天晚些时候它显示了正确的重定向。

我知道它必须与缓存有关,但是对于上述重定向,绕过缓存的最有效和最标准化的方法是什么?我会使用 php 还是 javascript

谢谢。

【问题讨论】:

尝试在您最后一次拨打header(); 之后拨打exit();,如本文所述:***.com/questions/7324645/… 我不确定那会做什么。除了我上面发布的之外,页面上没有其他代码。我的印象是,如果页面有额外的代码,或者如果您基于某些不需要运行的变量进行功能重定向,则使用了 exit()。不过我可能错了。 我不知道对此有何解释。但是,我认为值得一试;) 【参考方案1】:

试试这个:

header('Cache-Control: no-cache');
header('Pragma: no-cache');

浏览器可能会忽略您的请求,但这应该可以解决问题。

【讨论】:

我接受你的回答。浏览器确实忽略了它,至少对于最新版本的 chrome 和 firefox 而言,但由于某种原因正确单击刷新允许重定向。在需要刷新缓存之前,所以不太清楚为什么。 把它放在你的代码之前,你也可以只添加“exit();”如果您愿意,可以在您的标头重定向之后。它不会伤害任何东西,当我知道我想在代码的那个点重定向并且不希望在那个点以下发生任何其他事情时,我倾向于这样做。我知道你没有在页面上做任何其他事情,但这并不是一个坏习惯。【参考方案2】:

正确的答案是lucasvscn 在标题标签后添加exit(); 所说的。上面提到的缓存控制实际上对我造成了错误。

【讨论】:

以上是关于由于浏览器缓存,PHP 标头 301 重定向不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何找到 301/302 重定向源?

301,302,303,307重定向区别

浏览器如何使用查询字符串缓存 301 重定向

301重定向后如何防止chrome从磁盘缓存中加载index.html

为啥浏览器会为 http://example.com 缓存 301 重定向并将其用于 http://example.com:8080?

为啥我的 301 重定向需要这么长时间?