Рейтинг:0

Условие Apache IF на основе пользовательского заголовка HTTP

флаг cn

У меня есть директива RewriteRule в Apache, которую я хотел бы применять только в том случае, если присутствует собственный HTTP-заголовок.

Что я пробовал:

<If "%{HTTP:X-MyCustomHeader} in { 'present' }">
RewriteRule ^/$ /present.html [NC,R=301,L]
</If>
<Else>
RewriteRule ^/$ /absent.html [NC,R=301,L]
</Else>

Это вообще не работает, ни RewriteRule не применяется.

Альтернатива, которую я пробовал:

<If "-n req_novary('X-MyCustomHeader')">

Тоже не работает.

Я тестирую с завитком, как

curl -is http://example.com/ -H X-MyCustomHeader: присутствует

Чтобы убедиться, что заголовок присутствует и виден, я попытался использовать переменную env:

SetEnvIf X-MyCustomHeader ^(присутствует)$ MY_CUSTOM_VAR=$1
Заголовок всегда устанавливает X-MyCustomHeader "### FOUND ###" env=MY_CUSTOM_VAR

Это работает, как и ожидалось, и я получаю FOUND в ответ.

Но опять же, когда я пытаюсь использовать переменную env в операторе IF, она не срабатывает, например.

<If "-n env('MY_CUSTOM_VAR')">

Как я могу сделать это с ЕСЛИ? И да, я знаю, что есть условие RewriteCond для проверки переменных среды, но мне нужно использовать и другие директивы, поэтому я хотел бы переключать их в блоке IF.

Согласно документам: https://httpd.apache.org/docs/trunk/en/expr.html#functions

Когда переменные среды просматриваются в условии, важно учитывать, насколько рано в обработке запроса происходит это разрешение. Как правило, любая директива, определенная вне контекста виртуального хоста (каталог, местоположение, htaccess), скорее всего, еще не успела выполниться. SetEnvIf в области виртуального хоста — это одна директива, которая выполняется до этого разрешения.

Итак, согласно документам, переменные SetEnvIf должны работать, но не работают?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.