我正在尝试控制某个目录中文件的缓存。我希望默认缓存时间为15分钟,但我想让应用程序在必要时更改它。例如,我可能有一个PHP脚本,我想每1分钟刷新一次,所以我将在PHP中为该脚本设置缓存控制头。但对于所有其他文件,我只想将缓存时间设置为15分钟,其中一些是静态文件,因此我不能只在PHP中设置默认缓存时间。
我目前在我的Apache配置中有这个:
<Directory />
Options FollowSymLinks
AllowOverride None
Header set Cache-Control "max-age=900"
</Directory>
这对于99%的情况非常有用,我只需要15分钟的缓存。但是,如果我的PHP脚本设置了缓存控制标头,则此设置将覆盖它。
我查看了mod_header的文档,没有任何设置(unset,add,append等)似乎给了我我需要的东西。
提前致谢。
答案 0 :(得分:1)
根据php手册
<?php
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
通过发送上面的标题,您应该覆盖任何可能导致脚本输出被缓存的设置。
答案 1 :(得分:1)
请看一下mod_expires而不是http://httpd.apache.org/docs/2.2/mod/mod_expires.html。文档说它不会覆盖PHP脚本创建的标题:
“当Expires标头已经是生成的响应的一部分时 服务器,例如,当由CGI脚本生成或代理时 原始服务器,此模块不会更改或添加Expires或 Cache-Control标题。“
以下是mod_expires的示例配置:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault A600
ExpiresByType image/gif "access plus 1 day"
ExpiresByType image/jpeg "access plus 1 day"
ExpiresByType image/png "access plus 1 day"
ExpiresByType image/x-icon "access plus 1 day"
<FilesMatch "\.(php|php4)$">
ExpiresByType text/html "now"
</FilesMatch>
</IfModule>
取自http://howto.gumph.org/content/reduce-webserver-bandwidth/
祝你好运!