如何在整个站点中禁用http缓存?

时间:2013-02-01 20:43:49

标签: caching symfony maintenance http-caching maintenance-mode

我需要能够将网站置于“维护模式”。所以我在app.php中使用了像这样的廉价黑客(原来的app.php被移到了app.php.bak):

<?php

$key = 123;

if(isset($_GET['skip_maintenance_key']) && $_GET['skip_maintenance_key'] == $key) {
    setcookie('skip_maintenance_key', $key);
}

if(isset($_COOKIE['skip_maintenance_key']) && $_COOKIE['skip_maintenance_key'] == $key) {
    include 'app.php.bak';
    // placeholder
} else {
    //header('Cache-Control: public, maxage=30');
    header('Status: 503 Service Unavailable');
    include 'html/error/503.html';
}

问题是,只要我点击使用http缓存的页面,该页面就会被Cloudflare或我自己的代理等中介缓存,并开始向所有人提供。

所以我想做的是在维护期间以某种方式全局禁用http缓存,可能在// placeholder中添加一行代码?

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我读了Fabien说(在被拒绝的拉取请求中)这应该由Web服务器处理。所以我改变了我的维护脚本来修改服务器配置而不是框架。

问题是服务器无法删除缓存标头。但后来我发现NginxHttpHeadersMoreModule工作正常,问题解决了。

答案 1 :(得分:-1)

如果您有权访问httpd.conf,可以添加:

Header set Cache-Control no-cache
Header set Expires 0

如果没有,请查看此tutorial