Пользовательские заголовки (mod_headers) не отображаются в сочетании с mod_rewrite

У меня есть виртуальный хост с несколькими связанными с ним именами домена. Я пытаюсь отправить дополнительные заголовки, когда делается запрос к одному конкретному имени домена.

Вот что я делаю (пробовал как в 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. Есть ли способ исправить это?

4
задан 1 March 2016 в 02:34
1 ответ

Как сказано в комментариях @Zimmi, заголовки применяются только к ответам "Успех" (коды HTTP 2xx). Переадресация - это 3xx-коды и, следовательно, заголовок не будет получен.

Если вы используете Набор заголовков ..., то используйте Набор заголовков всегда .... Если вы используете другое действие (добавить, добавить и т.д.), то используйте соответствующее действие.

Обратите внимание, что не следует слепо "всегда устанавливать". Из документов:

Значение по умолчанию наступления может потребоваться изменить на "всегда" при обстоятельствах, аналогичных перечисленным ниже. Обратите также внимание, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, так как в отношении существующих заголовков не всегда является избыточным значением приступа:

Вы добавляете заголовок к не приступающему (не-2xx) ответу, например, к редиректу, в этом случае в конечном ответе используется только таблица, соответствующая всегда. Вы изменяете или удаляете заголовок, сгенерированный CGI-скриптом, и в этом случае CGI-скрипты находятся в таблице, соответствующей всегда, а не в таблице по умолчанию. Вы изменяете или удаляете заголовок, сгенерированный какой-то частью сервера, но этот заголовок не находится в стандартном состоянии доступа.

Для заголовков HSTS (которые я пытался добавить к канонизации домена) это кажется правильным подходом.

.
3
ответ дан 3 December 2019 в 03:41

Теги

Похожие вопросы