我看到了很多有关强制缓存重新加载的答案,推荐了一种结合HTML页面本身的解决方案。
但是,如果您遇到的情况是您的旧网站被写为index.html
主页,而现在又将其替换为新内容,那么如何确保回访者看到新内容呢?
旧网站曾经以index.html
作为索引页(在nginx
的配置下),我现在将其更改为index.php
。但是,无论何时我从以前访问过的浏览器访问它,它仍然会打开缓存的旧index.html
页。新的浏览器将正确加载index.php
。
我找到的看似正确的答案之一是告诉nginx
为expires -1;
部分设置server {}
,这将迫使缓存无效;但由于某些原因无法正常工作。
当然,需要发生的事情是访问者将始终获得新页面,而无需自己明确发布刷新。
大概解决方案应该是通过标头使缓存无效。但是如何?
index.html
文件。index.html
和index.php
的存在不会产生冲突。整个系统运行正常,只有在将index.html
设置为服务器配置中的索引页时,以前访问过该页面的旧访问者仍将缓存的index.html
作为主页将索引更改为index.php
之后。即使在index.html
文件被完全删除后,仍然会发生此问题,这也很容易证明。因为一旦浏览器缓存了HTML文件,它就不再向服务器询问索引文件是什么,而只会显示它已缓存的内容。所以完整的场景是这样:
index.html
设置为服务器配置中的索引页面index.php
index.html
在数字5中,如果我要使用新的浏览器访问该网站,它将显示index.php
中新主页的内容。所以问题是,我如何让旧的浏览器忘记它缓存的内容,并加载新的首页?
答案 0 :(得分:0)
如果我正确理解了您的问题,我相信您正在寻找的是称为缓存清除的内容。这意味着您实际上是在相关的CSS / JS文件中添加了幻影/鬼影字符串。所谓相关,是指您希望随着时间的流逝而进行更改的文件。
请记住,对于用户来说,缓存是一种健康的功能,因为一旦用户加载了内容,缓存就会使您的网站更快。因此,您应该仔细考虑要将缓存清除添加到的文件。 Fx。无需将缓存清除添加到您以后将不会对其进行更改的静态库中。
以下是缓存清除的示例:
<script src="/js/example.js<?php echo '?'.date('Y-m-d H:i:s'); ?>" type="text/javascript"></script>
<link href="/css/example.css<?php echo '?'.date('Y-m-d H:i:s'); ?>" rel="stylesheet">
您将在这里注意到的是,我正在将PHP date函数连接到我的JS和CSS示例中。日期功能可打印当前日期,小时,分钟和秒。换句话说,它不断地将名称更改为第二个。因此,浏览器无法保留文件的缓存版本,因为从技术上讲,它们在经过每秒之后就不是同一文件。
如果这不是您想要的,请让我知道,我将编辑答案。
您的问题也可能与here所解决的问题相似。