如何确保以前的访客不';看不到旧的HTML页面吗?

如何确保以前的访客不';看不到旧的HTML页面吗?,html,nginx,cache-control,cache-invalidation,Html,Nginx,Cache Control,Cache Invalidation,我看到了很多关于强制缓存重新加载的答案,并推荐了一个包含HTML页面本身的解决方案 但是,当您的旧网站被编写为index.html主页,而现在您将其与新内容交换时,您如何确保返回的访问者看到新内容 以前的网站有index.html作为索引页面(在nginx的配置中),现在我把它改为index.php。但是,每当我从以前访问过它的浏览器中访问它时,它仍然会打开缓存的旧index.html页面。新浏览器将正确加载index.php 我找到的一个看似正确的答案是告诉nginx设置expires-1,这

我看到了很多关于强制缓存重新加载的答案,并推荐了一个包含HTML页面本身的解决方案

但是,当您的旧网站被编写为
index.html
主页,而现在您将其与新内容交换时,您如何确保返回的访问者看到新内容

以前的网站有
index.html
作为索引页面(在
nginx
的配置中),现在我把它改为
index.php
。但是,每当我从以前访问过它的浏览器中访问它时,它仍然会打开缓存的旧
index.html
页面。新浏览器将正确加载
index.php

我找到的一个看似正确的答案是告诉
nginx
设置
expires-1服务器{}
部分的code>,这将强制缓存失效;但由于某种原因,这不起作用

当然,需要做的是,访问者将始终获得新页面,而无需自己明确发出刷新命令

大概解决方案应该是通过标头使缓存无效。但是怎么做呢

编辑以处理所有建议的评论和答案
  • 正如我在回答的第一段中所说,编辑索引文件(比如添加“缓存破坏”参数)并不能解决这个问题,因为索引文件本身已经被缓存,这就是问题所在
  • 我的问题中没有提到javascript或CSS文件。同样,缓存的是
    index.html
    文件
  • index.html
    index.php
    的存在不会产生冲突。整个系统工作正常,只有以前在服务器配置中将
    index.html
    设置为索引页面时访问过该页面的老访问者,即使索引已更改为
    index.php
    ,仍会将缓存的
    index.html
    作为主页。即使在
    index.html
    文件被完全删除之后,这个问题仍然会发生,这一事实也很容易证明这一点。因为一旦浏览器缓存了HTML文件,它就不再向服务器询问索引文件是什么,它只显示缓存的内容
  • 因此,完整的场景如下:

  • 该网站在服务器配置中将
    index.html
    设置为索引页
  • 浏览器访问该网站
  • 浏览器缓存主页
  • 服务器配置中的索引页更改为
    index.php
  • 同一浏览器访问该网站
  • 浏览器显示以前缓存的
    index.html

  • 第五,如果我使用新浏览器访问网站,它将显示
    index.php
    中新主页的内容。所以问题是,如何让旧浏览器忘记缓存的内容,并加载新主页?

    如果我正确理解了你的问题,我相信你正在寻找的是所谓的缓存破坏。这意味着,本质上是向相关CSS/JS文件添加幻影/幻影字符串。所谓相关,我指的是您希望在一段时间内对其进行更改的文件

    请记住,缓存对用户来说是一项健康的功能,因为一旦用户加载内容一次,它会使您的网站更快。因此,您应该仔细考虑要将缓存破坏添加到哪些文件中。外汇。不需要将缓存破坏添加到静态库中,您以后不会对其进行更改

    缓存破坏的示例如下:

    <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">
    

    我理解正确了吗?您没有“新”索引页,而是一个旧的索引页。然后你做了一些CSS/JS更改,你做了什么,用户缓存了旧的CSS/JS,现在你希望他们有一个未缓存的页面版本,以便他们使用新编辑的CSS/JS?如果是这样的话,那么一种方法就是在CSS/JS文件中添加一个相关的幻影/幻影字符串。更广为人知的是缓存破坏。这不应该添加到静态库中,而是随着时间的推移而改变的东西,比如定制CSS和JS等等。无需将其添加到静态库中,您将不会对其进行更改,因为缓存是一种健康的功能,使用户可以更快地加载内容,改善用户体验。如果您有两个索引文件,即assuminly index.html和另一个名为index.php,则可能会导致一些冲突。我建议将旧的索引文件命名为index-old.html,并在.htaccess文件中加入重定向逻辑,这样,如果用户登陆/尝试转到index-old.html,他们将被重定向到相关的索引页面,在本例中为index.php。如果你不想将旧的索引页中包含的任何内容保存为备份,你也可以完全删除它。我已经编辑了我的原始问题以解决这些建议@Martini已经编辑了我的原始问题,以解决每个人的建议。您是否无法缓存页面以使其被迫加载新内容?例如,如果他们加载并使用旧的which-page.php,那么执行which-page.php?123将使浏览器完全将其解释为其他内容,并加载新版本。当然,但如何让访问者访问该URL呢?所有这些都是指主页,当访问者访问基本URL时加载主页,例如
    www.example.com
    。所以我不能强迫人们说“顺便说一句,在你的地址栏里加上123”。基本上,这里的问题是服务器曾经告诉每个人“请缓存你的HTML页面”,现在我需要它告诉他们“等等,我改变主意了”。你知道我的意思吗?因为那些浏览器缓存HTML页面是正确的行为,但这在开发部分是一个错误,现在我需要一种机制来撤销它