У меня есть требование, в котором мне нужно установить RequestHeader
со значением, полученным из строки запроса URI.
Используемый подход заключается в написании RewriteCond
и ReWriteRule
, где
условием является извлечение значения из переменной % {QUERYSTRING}
и установка его в другую переменную среды, а затем ссылка на это и добавление в заголовок запроса.
Но это, похоже, не работает для меня . Я использую Apache 2.2 на RHEL.
Моя конфигурация httpd, помещенная в один из файлов .conf, выглядит следующим образом.
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule . - [E=RU:%1]
Header set "X-Header" "%{RU}e" env=RU
ПРИМЕЧАНИЕ: Я также пытался установить заголовок запроса, жестко закодировав значение, и у меня также был включен модуль прокси.
RequestHeader set X-User-ID "test"
Header append X-test %{RU}e
RequestHeader set X-UserID %{RU}e early
Использование опции «ранний» также не помогло.
В своей первоначальной конфигурации вы используете Header
вместо RequestHeader
. Header
устанавливает заголовок ответа, а не заголовок запроса.
Я протестировал его, добавив логирование заголовка X-заголовка HTTP в формат журнала доступа, и он работает нормально. Единственное, что я изменил, это . на ^ в RewriteRule
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^ - [E=RU:%1]
RequestHeader set "X-Header" "%{RU}e" env=RU
How are you testing the header has been set?
.Судя по вашему последнему комментарию, похоже, что вы пытаетесь установить переменную окружения, сохраняющую внешние перенаправления. Это невозможно сделать с переменными окружения или заголовком запроса, так как они скопированы на запрос. Однако, вы можете сделать это, установив cookies в RewriteRules с помощью флага CO.
Решение, предложенное @Unbeliever, лучше всего работает, когда вы хотите, чтобы переменные окружения пережили внутренние переадресации, выполняемые Apache mod_rewrite. Имейте в виду, что пользовательский заголовок может быть не сразу доступен для обработки .
.