我正在调试一个HTTP 301永久重定向的问题。经过快速测试,Safari似乎在重新启动时清除了它的301缓存,但Firefox却没有。

IE、Chrome、Firefox和Safari什么时候清空它们的301缓存?

For example, if I want to redirect 1.example to 2.example, but I accidentally set it to redirect to 3.example, that is a problem. I can correct the mistake, but anyone who has visited 1.example in the meantime will have cached the incorrect redirect to 3.example, and so they will not be able to reach either 1.example or 2.example until their cache is cleared. Upon investigation, I find that there were no Cache-Control and Expires headers set. The headers for the incorrect 301 response would have been like this:

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://3.example/
Content-Type: text/html

我自己的测试表明:

IE7, IE8, Android 2.3.4完全不缓存。 Firefox 18.0.2、Safari 5.1.7(适用于Windows 7)和Opera 12.14都有缓存,并在重新启动浏览器时清除缓存。 IE10和Chrome 25缓存,但不清楚浏览器重启,所以他们什么时候会清除?


当前回答

移动Chrome(93版)的一个技巧:尝试在“桌面网站”模式下打开url -这在我的情况下删除了一个永久缓存重定向。

其他回答

作为@thomasrutter的回答

如果您之前发出了301重定向,但想要取消该操作

如果人们在浏览器中仍然有缓存的301重定向,他们将继续被带到目标页面,而不管源页面是否仍然有重定向。解决这个问题的方法包括:

最简单和最好的解决方案是再次发出301重定向。

浏览器会意识到它被引导回到它之前认为是退役的URL,这应该会导致它重新获取该URL,以确认旧的重定向不存在。

如果您无法控制前一个重定向目标所访问的站点,那么您就不走运了。试着请求网站所有者重定向回你。

事实上,这意味着:

a. 301到b.example 删除a.example的301 将b.example 301添加到a.example中

这样就有用了。

我有一个简单的解决方案,适用于所有主要的浏览器(最新版本),包括IE, Chrome和FF

Ctrl + Shift + Del - Chrome浏览器:选择“浏览历史记录”和“缓存…” IE:我离开默认选项“临时互联网文件和网站文件”,“Cookies和网站数据”,“历史” FF:“浏览和下载历史”,“缓存” 点击“删除” 关闭并重新打开浏览器。应该可以

要禁用重定向,请将此代码放在重定向站点的索引文件中

<script>
    fetch('https://www.example.com', {method: 'post'}).then(() => {})
</script>

正如其他答案所示,在浏览器中缓存的持续时间可能是无限的。这是极其危险和恼人的。所以不要这么做。至少添加缓存头。在htaccess中,我总是这样做,根本没有缓存:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
  # The E=nocache:1 sets the environment variable nocache to the value of one
  RewriteRule ^/?(.*) https://www.example.org/$1 [L,R=301,E=nocache:1]
</IfModule>


<IfModule mod_headers.c>
  ## Set the response header if the "nocache" environment variable is set
  ## in the RewriteRule above.
  Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache

  ## Set Expires too ...
  Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT" env=nocache
</IfModule>

编辑:

如果过去没有缓存301重定向,则必须从目标重定向回源。例子:

如果你有这个

RewriteRule /my-source /my-target [L,R=301]

你需要把这个

# RewriteRule /my-source /my-target [L,R=301]
RewriteRule /my-target /my-source [L,R=301]

有一个非常简单的方法来删除浏览器缓存http重定向,如301,307等。

你可以在chrome浏览器的开发控制台打开网络面板。选择网络调用。右键单击它,然后单击“清除浏览器缓存”以删除缓存的重定向。