首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP缓存头覆盖

PHP缓存头覆盖
EN

Stack Overflow用户
提问于 2012-09-03 03:51:01
回答 3查看 3.4K关注 0票数 5

我已经在这里通过了100多个答案,有很多要尝试,但都没有效果??

有一个基于PHP的网站。我需要关闭所有.php文件的缓存,除了几个精选文件。

因此,在.htaccess中,我有以下内容:

代码语言:javascript
复制
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,我看到了以下内容:

代码语言:javascript
复制
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页面的顶部添加以下内容:

代码语言:javascript
复制
<?php header("Cache-Control: max-age=360"); ?>

不是的。

然后我尝试了上面的不同版本。不是的。

然后我尝试了meta http-equiv的变体。不是的。

然后,我尝试了.htaccess代码的变体以及上面的变体,例如将其限制为:

代码语言:javascript
复制
# Eliminate caching for certain dynamic files
<FilesMatch "\.(php|cgi|pl)$">
Header set Cache-Control "no-cache, max-age=0"
</FilesMatch>

不是的。

似乎我所做的任何事情都不会允许使用.htaccess代码缓存单个.php,除非从.htaccess文件中完全删除这些语句。

我哪里错了?我要怎么做才能让单独的php页面可缓存,而其余的页面保持关闭??

谢谢你的任何想法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-11 00:50:38

好吧,显然这是没有答案的。因此,在这一点上,我的解决方案是完全消除.htaccess代码,并对每个文件应用显式标头。你知道,这是一种痛苦,但现在是时候向前看了。如果有人有一个更优雅的解决方案,可以与.htaccess的默认工作,请随时分享…谢谢

票数 3
EN

Stack Overflow用户

发布于 2015-05-10 07:30:47

所以我知道我来晚了。也许太晚了。但我遇到了一个类似的问题,我想我应该分享我的解决方案。

基本上,对于每个我不想缓存的文件(或者缓存时间与静态资源不同的文件),我都关闭了ExpiresActive。它看起来像这样:

代码语言:javascript
复制
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文件覆盖,就像您之前所做的那样

代码语言:javascript
复制
<?php header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 360) . ' GMT'); ?>

希望这能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2017-03-22 17:48:59

这个答案为我提供了解决方案:https://stackoverflow.com/a/4521120/2685496

我不知道session_start();在默认情况下会覆盖缓存控制,并用值来确保页面不会被缓存。

您可以像Marcin建议的那样,在session_start();之前使用session_cache_limiter('public');,也可以将header();语句放在session_start();之后。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12239225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档