mod_rewrite: variáveis de ambiente não estão sendo expandidas em RewriteConds

3

Eu tenho um RewriteCond em .htaccess semelhante a:

RewriteCond "%{ENV:FOO}" =bar

Mas o ${ENV:FOO} está sendo expandido para o valor de FOO , está sempre em branco.

Por exemplo, se eu SetEnv FOO "bar" antes do RewriteCond e, em seguida, aumentar o RewriteLogLevel , obtenho isso no meu log de regravação:

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

O que estou fazendo errado aqui? Como posso fazer com que variáveis de ambiente se expandam dentro de RewriteCond s?

Além disso, se eu adicionar uma bobagem RewriteRule como RewriteRule .* %{ENV:FOO} , eu posso ver no registro de reescrita que a variável está sendo corretamente expandida lá.

Minha versão do Apache é 2.2.17.

Editar : encontrei outra referência para esse problema. Parece que uma "solução" é usar SetEnvIf em vez de SetEnv … = \

Além disso, não parece que a localização do SetEnv tenha algum efeito. Eu coloquei no httpd.conf e no .htaccess , e nem trabalho.

    
por David Wolever 08.07.2011 / 23:17

1 resposta

3

Ah, aqui vamos nós. A partir da documentação do SetEnv (em "advertências"):

The SetEnv directive runs late during request processing meaning that directives such as SetEnvIf and RewriteCond will not see the variables set with it.

Então, por enquanto, acho que estou usando:

SetEnvIf _ .* FOO=bar
    
por 08.07.2011 / 23:28