我正在使用PHP开发一个简单的网站。
开发配置:WAMP
生产配置:LAMP
在测试时,我更改了CSS文件,但当我重新加载页面时,我的浏览器(不确定)仍然使用旧的缓存CSS。
我做了一些谷歌搜索,发现了不同的解决方案,我已经尝试过
- 在css
css/main.css?78923
末尾追加查询 - 使用
Ctrl + R
(在Firefox中)强制获取资源 - 禁用Firefox缓存以及使用
Clear Cache
Firefox插件
当这些都不起作用时,我在谷歌上做了更多的搜索,在那里我看到了一个堆栈页面(这里),有人建议Apache缓存资源。所以,问题不在于Firefox,而在于服务器。这家伙还提出了一个我不理解的解决方案(我是一个新手)
我的问题有两部分:
- Apache缓存资源是真的吗?(我该如何检查我的是否有?)
- 如何防止缓存
PS:复制和粘贴堆栈问题中的解决方案(我上面作为链接的解决方案)不起作用:(
我已经遇到这个问题好几次了,通常在生产站点上通过像这样调用我的css来解决这个问题
<link rel="stylesheet" type="text/css" href="style.css?v=1" />
当您推出更新时,只需将v=1
更改为v=2
,它将强制所有用户浏览器获取新的样式表。这也适用于脚本文件。如果您在Google
上查看源代码,您会注意到他们也使用这种方法。
我的LAMP开发系统曾经遇到过同样的问题,这是由网络装载引起的。我设法通过在我的apacheconf.中添加这两行来消除它
EnableMMAP off
EnableSendfile off
在我的php页面中,我通常会将当前日期时间添加到css href:的末尾
<link rel="stylesheet" type="text/css" href="style.css?<?php echo date('l jS 'of F Y h:i:s A'); ?>" />
参考:此处
我知道这是一个老问题,但我刚刚遇到了这个问题,也遇到了一些同样的问题。这里有一个不在任何文件上保留缓存的快速方法:
<link rel="stylesheet" href="css/style.css?<?=time()?>">
每次加载页面时,使用有助于获取最新版本。
- Apache(-modules)可以缓存资源,但这不是您当前的问题
- 要么禁用你的浏览器缓存,在重新加载时刷新缓存,要么用修改后的标题交付css。您可以编写一个设置过期标头的脚本,这样您的浏览器就必须获得css的新版本
无论如何,我不明白这一点。对于开发来说,只需禁用浏览器缓存或按Ctrl+r就更容易了。
当更改资产文件(js、css等)中的某些内容时,我总是使用httcacheclean
我想建议一些类似的东西:
<link rel="stylesheet" href="css/style.css?v=<?=filemtime('css/style.css')?>">
实际上,filemtime()函数返回文件修改时间。因此,如果仅更改文件,则值将不同。否则,该值将保持不变。
因此,这个函数可以帮助我们防止文件的缓存被更改,并且如果文件没有更改,也可以鼓励缓存,因为它将返回相同的值。
如果filemtime()值没有更改,浏览器将使用缓存的CSS。