我的虚拟主机中有以下指令:
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
设置的标头在重定向响应中存在,但在成功时不存在。这是有道理的,因为该指令不会在重定向时执行。always
ExpiresActive
为什么在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 的情况下无法执行。