Answers:
试过这个吗?如果在这两个工作.htaccess
,httpd.conf
并在VirtualHost
(通常位于httpd-vhosts.conf
如果您已经从它包含的你的httpd.conf)
<filesMatch "\.(html|htm|js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
</filesMatch>
100%防止文件被缓存
这类似于Google广告采用标头Cache-Control:private,x-gzip-ok =“”>来防止代理和客户端缓存广告的方式。
来自http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html
如果使用的扩展名不是模板扩展名,则可以选择为正在检索的模板文件添加扩展名.html
。
LoadModule headers_module lib/modules/mod_headers.so
<filesMatch "\.+">
或<filesMatch ^>
基于此处的示例:http : //drupal.org/node/550488
以下可能在.htaccess中工作
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On
# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600
<FilesMatch (\.js|\.html)$>
ExpiresActive Off
</FilesMatch>
</IfModule>
<IfModule mod_expires.c>
and </IfModule>
部分..如果未启用mod_expires,您将得到一个错误,而不是那些被悄悄忽略的指令。
我遇到了同样的问题,但是在这里找到了一个很好的解决方案: 停止在MAMP中为PHP 5.5.3缓存
基本上找到php.ini文件并注释掉OPCache行。我希望这个替代答案也能帮助其他人。
没有mod_expires,将很难在文件上设置过期标头。对于生成的任何内容,您当然都可以在答案上设置一些默认标头,执行类似mod_expires的工作:
<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>
(摘自:@brianegge的堆栈溢出答案,其中还解释了mod_expires解决方案)
现在,这不适用于静态文件(例如javascript文件)。至于静态文件,浏览器和源文件之间只有apache(没有任何过期模块)。为防止在浏览器中完成对javascript文件的缓存,您可以在js网址的末尾使用随机令牌,例如?rd=45642111
,因此该网址应类似于:
<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">
如果页面上的该网址是由PHP文件生成的,则只需将随机部分添加到PHP中即可。通过简单地附加随机查询字符串参数来随机化url的这种方式是ajax jQuery请求的no-cache设置的基础。浏览器永远不会将具有不同查询字符串的2个url视为相同,并且永远不会使用缓存的版本。
编辑
注意,您应该测试mod_headers。如果您有mod_headers,则可以直接使用Header关键字设置Expires标头。
<FilesMatch "\.(js|css)$">
ExpiresActive On
ExpiresDefault A1
Header append Cache-Control must-revalidate
</FilesMatch>