如果 mod_expires ExpiresActive On,Apache“始终设置”标头将被删除

如果 mod_expires ExpiresActive On,Apache“始终设置”标头将被删除

我的虚拟主机中有以下指令:

Header always set Strict-Transport-Security "max-age=157700000;"
Header always set ThisIsATestHeader "This is removed when ever ExpiresActive is on"
Header merge AnotherHeader "This will NOT be removed"

然后我使用以下命令打开 mod_expires:

ExpiresActive on

结果,所有设置的标头always set都消失了!但合并的标头会保留下来。这是为什么?如果这是故意的,那么我应该如何处理 HSTS 标头的问题,在我看来,HSTS 标头必须始终存在?

答案1

我找到了我的问题的解决方案和一半的答案。

显然,条件的always行为不符合预期。在特定情况下,实际行为似乎更像。例如,使用条件notsuccess设置的标头在重定向响应中存在,但在成功时不存在。这是有道理的,因为该指令不会在重定向时执行。alwaysExpiresActive

为什么在mod_expires打开时会发生这种情况,仍然是个谜。有一个对 Apache 文档的评论关于这种情况也发生在反向代理中。

为了解决这个问题,我想出了解决方案添加两次标头,一次用于非 2** 响应,一次用于 2** 响应。因此,在我的情况下,它将是:

# For redirects    
Header always set Strict-Transport-Security "max-age=157700000;"
# For success
Header set Strict-Transport-Security "max-age=157700000;"

现在它被设置为任何请求,因为条件always在打开 mod_expires 的情况下无法执行。

相关内容