Назад | Перейти на главную страницу

mod_rewrite: переменные среды не раскрываются в RewriteConds

я получил RewriteCond в .htaccess похожий на:

RewriteCond "%{ENV:FOO}" =bar

Но ${ENV:FOO} расширяется до значения FOO, всегда пусто.

Например, если я SetEnv FOO "bar" прямо перед RewriteCond, затем включите RewriteLogLevel, Я получаю это в моем журнале перезаписи:

RewriteCond: input='' pattern='=bar' => not-matched

Что я здесь делаю не так? Как я могу заставить переменные среды расширяться внутри RewriteCondс?

Кроме того, если я добавлю глупый RewriteRule лайк RewriteRule .* %{ENV:FOO}, Я вижу в журнале перезаписи, что переменная там правильно расширяется.

Моя версия Apache - 2.2.17.

редактировать: Я обнаружил другая ссылка к этой проблеме. Похоже, что «решение» - использовать SetEnvIf вместо того SetEnvзнак равно

Кроме того, это не похоже на расположение SetEnv имеет какой-либо эффект. Я поместил его как в httpd.conf, так и в .htaccess, и ни одна не работает.

А, вот и мы. Из Документация SetEnv (под «предостережениями»):

Директива SetEnv выполняется поздно во время обработки запроса, что означает, что такие директивы, как SetEnvIf и RewriteCond, не будут видеть переменные, установленные с ее помощью.

Итак, на данный момент я использую:

SetEnvIf _ .* FOO=bar