Qual é a diferença entre $ {var} e% {var} no httpd.conf?
Praticamente tudo. Não existe uma regra rígida que diga " $faz x, %faz y", porque eles fazem coisas diferentes dependendo de onde e como são usados.
O $ {VAR} será usado em qualquer lugar no httpd.conf, exceto nas diretivas mod_rewrite
Não - ${VAR}é aplicado como uma substituição em todos os locais da configuração, mesmo em uma linha relacionada ao mod_rewrite. Eles só podem ser definidos na inicialização usando a -Dopção passada para o binário httpd ou a Definediretiva.
Isso pode ser feito porque essas variáveis não devem conter um :caractere, enquanto o RewriteMapuso deve conter um :caractere. Isso permite $que ele seja usado de maneiras extremamente diferentes, sem conflitos - o analisador vê :e sabe que não deveria estar substituindo isso.
Uma variável definida no httpd.conf usando a Diretiva SetEnvIf, para uso no mesmo httpd.conf, seria usada como $ {var}, exceto quando a variável for usada com a diretiva mod_rewrite, em que a variável seria usada como% {var}?
Variáveis No. ambiente não são o mesmo que variáveis definidas via -Dou Define- eles são um contexto completamente separado por solicitação (esses são os que você está definindo com SetEnvIf), que apenas determinadas directivas irá utilizar. Eles são mencionados especificamente onde são suportados - no mod_rewrite %{ENV:variable}, nos logs %{variable}e, e muitas diretivas têm uma verificação lógica que se parece env=variable.
Então, basicamente; é uma bagunça confusa - um testemunho da história do servidor da web nas últimas duas décadas. Provavelmente a principal coisa que o confunde é que a sintaxe do mod_rewrite não se estende a nenhuma outra parte da configuração; é tudo diferente. O ponto principal a ser tirado de tudo isso é que não existe uma 'regra' governante para fazer tudo isso fazer sentido - $um local significa algo completamente diferente de $outro local.
Alguns pontos de referência úteis:
- Se você deseja definir uma variável estaticamente quando o Apache iniciar, use
Definee ${VAR}substitua 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 produção - mas não deve ser confundido com o uso do $from RewriteMap, que sempre contém a :.
- Se você deseja trabalhar com variáveis em solicitações específicas, as variáveis de ambiente são o que você procura - mas não é possível fazer suposições sobre a sintaxe que você usará para obtê-las quando usada com uma diretiva específica. Você precisará verificar a documentação dessa diretiva.
- Quando o mod_rewrite estiver em questão, jogue fora tudo o que você pensou que sabia sobre variáveis e sua sintaxe. Ele possui seu próprio conjunto de variáveis
%{VAR}, você pode obter as variáveis de ambiente 'normais' %{ENV:VAR}e definir variáveis de ambiente [E=VAR].