我已经在这里通过了100多个答案,有很多要尝试,但都没有效果??
有一个基于PHP的网站。我需要关闭所有.php文件的缓存,除了几个精选文件。
因此,在.htaccess中,我有以下内容:
ExpiresActive On
# Eliminate caching for certain dynamic files
<FilesMatch "\.(php|cgi|pl)$">
ExpiresDefault A0
Header set Cache-Control "no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>使用Firebug,我看到了以下内容:
Cache-Control no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, no-transform
Connection Keep-Alive
Content-Type text/html
Date Sun, 02 Sep 2012 19:22:27 GMT
Expires Sun, 02 Sep 2012 19:22:27 GMT
Keep-Alive timeout=3, max=100
Pragma no-cache
Server Apache
Transfer-Encoding chunked
X-Powered-By PHP/5.2.17嘿,看起来很棒!
但是,我有几个.php页面,我需要一些非常短的缓存。
我认为简单的答案就是在我想要启用缓存的每个php页面的顶部添加以下内容:
<?php header("Cache-Control: max-age=360"); ?>不是的。
然后我尝试了上面的不同版本。不是的。
然后我尝试了meta http-equiv的变体。不是的。
然后,我尝试了.htaccess代码的变体以及上面的变体,例如将其限制为:
# Eliminate caching for certain dynamic files
<FilesMatch "\.(php|cgi|pl)$">
Header set Cache-Control "no-cache, max-age=0"
</FilesMatch>不是的。
似乎我所做的任何事情都不会允许使用.htaccess代码缓存单个.php,除非从.htaccess文件中完全删除这些语句。
我哪里错了?我要怎么做才能让单独的php页面可缓存,而其余的页面保持关闭??
谢谢你的任何想法。
发布于 2012-09-11 00:50:38
好吧,显然这是没有答案的。因此,在这一点上,我的解决方案是完全消除.htaccess代码,并对每个文件应用显式标头。你知道,这是一种痛苦,但现在是时候向前看了。如果有人有一个更优雅的解决方案,可以与.htaccess的默认工作,请随时分享…谢谢
发布于 2015-05-10 07:30:47
所以我知道我来晚了。也许太晚了。但我遇到了一个类似的问题,我想我应该分享我的解决方案。
基本上,对于每个我不想缓存的文件(或者缓存时间与静态资源不同的文件),我都关闭了ExpiresActive。它看起来像这样:
ExpiresActive On
<FilesMatch "\.(php|cgi|pl)$">
# This makes sure that no cache headers can be set,
# but does not generate an error when trying to.
ExpiresActive Off
</FilesMatch>
# Your normal caching here
ExpiresDefault "access plus 1 month"现在,在PHP脚本中,您应该能够插入缓存头,而不会被.htaccess文件覆盖,就像您之前所做的那样
<?php header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 360) . ' GMT'); ?>希望这能帮上忙。
发布于 2017-03-22 17:48:59
这个答案为我提供了解决方案:https://stackoverflow.com/a/4521120/2685496
我不知道session_start();在默认情况下会覆盖缓存控制,并用值来确保页面不会被缓存。
您可以像Marcin建议的那样,在session_start();之前使用session_cache_limiter('public');,也可以将header();语句放在session_start();之后。
https://stackoverflow.com/questions/12239225
复制相似问题