я получил 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