What is the difference between ${var} and %{var} in httpd.conf?
Praticamente tudo. Não existe uma regra rígida que diga " $
does x, %
y", porque eles fazem coisas diferentes dependendo de onde e como eles são usados.
Will ${VAR} be used everywhere in httpd.conf, except in mod_rewrite directive's
Não - ${VAR}
é aplicado como um substituto em todos os locais ao longo da configuração, mesmo em uma linha relacionada ao mod_rewrite. Eles só podem ser definidos na inicialização usando a opção -D
passada para o binário httpd ou a diretiva Define
.
Isso pode ser feito porque essas variáveis não devem conter um caractere :
, enquanto o uso RewriteMap
deve conter um caractere :
. Isso permite que o $
seja usado de maneiras extremamente diferentes, sem conflito - o analisador vê o :
e sabe que ele não deveria estar substituindo isso.
Would a variable set in httpd.conf using SetEnvIf Directive, for use in same httpd.conf, be used as ${var} except when the variable is used with mod_rewrite directive's, where the variable would be used as %{var}?
Não. As variáveis de ambiente não são as mesmas que as variáveis definidas por -D
ou Define
- elas são um contexto completamente separado por solicitação (são aquelas que você está definindo com SetEnvIf
), que somente determinadas diretivas usarão. Eles são mencionados especificamente onde são suportados - no mod_rewrite eles são %{ENV:variable}
, em logs eles são %{variable}e
, e muitas diretivas têm uma verificação lógica que parece com env=variable
.
Então, basicamente; é uma bagunça confusa - um testemunho da história do servidor web nas últimas duas décadas. Provavelmente, a principal coisa que está confundindo você é que a sintaxe do mod_rewrite não se estende a nenhuma outra parte da configuração de forma alguma; é tudo diferente. O principal ponto a se tirar de tudo isso é que não há uma regra governamental para fazer tudo isso fazer sentido - um $
em um ponto significa algo completamente diferente de um $
em outro ponto.
Alguns pontos de referência úteis:
- Se você quiser definir uma variável estaticamente quando o Apache iniciar, use
Define
e${VAR}
para substituir uma vez, na inicialização do Apache. Isso é útil principalmente quando você deseja fazer algo como compartilhar arquivos de configuração entre um ambiente de desenvolvimento e de produção, mas não deve ser confundido com o uso do$
deRewriteMap
, que sempre contém:
. / li> - Se você deseja trabalhar com variáveis em solicitações específicas, as variáveis de ambiente são o que procura, mas não pode fazer suposições sobre a sintaxe usada para usá-las quando usada com uma diretiva específica. Você precisará verificar a documentação para essa diretiva.
- Quando o mod_rewrite está em questão, jogue fora tudo que você achou que sabia sobre variáveis e sua sintaxe. Ele possui seu próprio conjunto de variáveis em
%{VAR}
, você pode obter suas variáveis de ambiente 'normais' com%{ENV:VAR}
e pode definir variáveis de ambiente com[E=VAR]
.