У меня есть виртуальный хост с несколькими связанными с ним именами домена. Я пытаюсь отправить дополнительные заголовки, когда делается запрос к одному конкретному имени домена.
Вот что я делаю (пробовал как в vhost, так и в .htaccess, результаты те же)
SetEnvIf HOST thishost THETAG=noindex
Header set X-Robots-Tag "%{THETAG}e" env=THETAG
Header set X-Robots-Test "Yes"
По сути, всегда должен присутствовать заголовок X-Robots-Test. X-Robots-Tag должен присутствовать только в том случае, если установлен заголовок THETAG, который устанавливается только в том случае, если заголовок хоста содержит "thishost".
RewriteRule выглядит примерно так: так что в основном перенаправление 301 со страницы 1 на страницу 2
RewriteRule page1 page2 [L,R=301]
Когда делается запрос на страницу 2, заголовки отображаются правильно, но когда запрос выполняется на страницу 1 (и перенаправляется с помощью mod_rewrite), заголовки отсутствуют (даже тест заголовок).
Когда перенаправление инициируется из сценария PHP, а не из mod_rewrite, оно показывает заголовки, поэтому я предполагаю, что проблема в том, что mod_rewrite имеет приоритет над mod_headers. Есть ли способ исправить это?
Как сказано в комментариях @Zimmi, заголовки применяются только к ответам "Успех" (коды HTTP 2xx). Переадресация - это 3xx-коды и, следовательно, заголовок не будет получен.
Если вы используете Набор заголовков ...
, то используйте Набор заголовков всегда ...
. Если вы используете другое действие (добавить, добавить и т.д.), то используйте соответствующее действие.
Обратите внимание, что не следует слепо "всегда устанавливать". Из документов:
Значение по умолчанию наступления может потребоваться изменить на "всегда" при обстоятельствах, аналогичных перечисленным ниже. Обратите также внимание, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, так как в отношении существующих заголовков не всегда является избыточным значением приступа:
Вы добавляете заголовок к не приступающему (не-2xx) ответу, например, к редиректу, в этом случае в конечном ответе используется только таблица, соответствующая всегда. Вы изменяете или удаляете заголовок, сгенерированный CGI-скриптом, и в этом случае CGI-скрипты находятся в таблице, соответствующей всегда, а не в таблице по умолчанию. Вы изменяете или удаляете заголовок, сгенерированный какой-то частью сервера, но этот заголовок не находится в стандартном состоянии доступа.
Для заголовков HSTS (которые я пытался добавить к канонизации домена) это кажется правильным подходом.
.