我在这里已经完成了100多个答案,很多可以尝试,没有工作?
拥有基于PHP的网站。我需要为所有.php文件缓存OFF,除了SELECT FEW。
所以,在.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>
不。
我似乎没有做任何事情,只允许单个.php使用.htaccess代码启用缓存,而不是完全从.htaccess文件中删除语句。
我哪里错了?我需要做些什么才能让个别的php页面可以缓存,而其余的页面保持关闭状态?
感谢您的任何想法。
答案 0 :(得分:2)
答案 1 :(得分:1)
所以我知道我迟到了......也许为时已晚。但我遇到了一个类似的问题,我想我会分享我的解决方案。
基本上,我为每个不想缓存的文件(或者缓存时间与静态资源不同)关闭了ExpiresActive Off。它看起来像这样:
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'); ?>
希望这有用。
答案 2 :(得分:1)
这个答案为我提供了解决方案:https://stackoverflow.com/a/4521120/2685496
我很少知道默认情况下session_start();
会使用值覆盖您的Cache-control和Expires标头,以确保页面不会被缓存。
您可以在session_cache_limiter('public');
之前使用session_start();
,就像Marcin建议的那样,或者您可以在header();
之后添加session_start();
语句。