У меня есть требование, где мне нужно установить 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
устанавливает заголовок ответа, а не заголовок запроса.
Я протестировал его, добавив запись HTTP-заголовка X-header в формат журнала доступа, и он отлично работает. Единственное, что я изменил, - это расширение. к ^ в RewriteRule
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^ - [E=RU:%1]
RequestHeader set "X-Header" "%{RU}e" env=RU
Как вы тестируете заголовок был установлен?
Судя по вашему последнему комментарию, похоже, вы пытаетесь установить переменную среды, которая выдерживает внешние перенаправления. Это невозможно сделать с переменными среды или заголовком запроса, поскольку они ограничены для каждого запроса. Однако вы можете сделать это, установив файлы cookie в RewriteRules с помощью флага CO.
Решение, предложенное @Unbeliever, лучше всего работает, когда вы хотите, чтобы переменные среды выдерживали внутренние перенаправления, выполняемые Apache mod_rewrite. Имейте в виду, что настраиваемый заголовок не может быть немедленно доступен для оценки.