【发布时间】:2023-04-01 04:40:01
【问题描述】:
这简直让我发疯。我们在 Apache 上运行 Wordpress(如果不是很明显,我们是这个堆栈的新手)。具体来说,这是一个 Bitnami AMI。由于我们几乎 100% 使用 AWS,因此我想在 Wordpress 站点前使用 Cloudfront 动态内容缓存。我已经阅读了大量关于如何使用 W3 Total Cache(或类似内容)来完成这项工作的文档/帖子。但我真正想做的就是抓住 Cache-Control 标头,这样我就可以让 Cloudfront 以应有的方式工作。
目前,我已修改 functions.php 以包含应该修改标头的代码(基于此处的另一篇文章)。
function varnish_safe_http_headers() {
session_cache_limiter('');
header_remove("Cache-Control");
header("Cache-Control: public, max-age=60");
if( !session_id() )
{
session_start();
}
}
add_action( 'template_redirect', 'varnish_safe_http_headers' );
不幸的是,我最终得到了两个标题。
Cache-Control:public, max-age=60
Cache-Control:max-age=0, no-cache
第一个标题是我的。第二个标头来自堆栈中我似乎无法找到/配置的其他位置。我已经在 Wordpress 目录的全部内容中搜索了我能想到的任何字符串,这些字符串可以帮助我找到执行此操作的代码。
我还尝试将 add_action 调用中的“钩子”更改为任意数量的值,从“send_headers”一直向下工作。唯一的结果是两个缓存控制头改变了顺序。到目前为止,我无法删除/覆盖“max-age=0, no-cache”值。
我也尝试过修改 .htaccess、Bitnami 特定的 htaccess.conf 文件等。
编辑:在阅读here 之后,似乎第二个标题一定是在Wordpress/PHP 中的某个地方引起的。该文档使“处理程序”(在本例中为 PHP)似乎获得了响应处理的最后决定权。该阶段完成后,只需将响应发送到客户端并进行日志记录。
编辑 2:我在站点的根目录中添加了一个 foo.php 文件。它根本不调用任何 Wordpress 函数。两个 Cache-Control 标头仍然出现。这是文件的全部内容。
<?php
header("Cache-Control: public, max-age=60");
?>
【问题讨论】:
标签: wordpress apache caching cache-control bitnami