На моем виртуальном хосте есть следующие директивы:
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, который, как я понимаю, должен присутствовать всегда?
Я нашел решение своей проблемы и половину ответа.
Относительно условного always
ведет себя не так, как ожидалось. В конкретном случае фактическое поведение больше похоже на notsuccess
. Заголовки установлены с always
условные присутствуют, например, при ответах на перенаправление, но не при успехах. Это имеет смысл, поскольку ExpiresActive
директива не будет выполняться при перенаправлении.
Почему это происходит, когда mod_expires
включен, до сих пор остается загадкой. Eсть комментарий к документации 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.