>我需要能够将站点置于"维护模式"。所以我在应用程序中使用了像这样的廉价黑客.php(原始应用程序.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
中添加一行代码?
如果你可以访问httpd.conf,你可以添加:
Header set Cache-Control no-cache
Header set Expires 0
如果没有,请查看本教程
我读到Fabien说(在一个被拒绝的拉取请求中)这应该由Web服务器处理。所以我更改了维护脚本以修改服务器配置而不是框架。
问题是服务器无法删除缓存标头。但后来我发现NginxHttpHeadersMoreModule工作得很好,所以问题解决了。