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 -D
opção passada para o binário httpd ou a Define
diretiva.
Isso pode ser feito porque essas variáveis não devem conter um :
caractere, enquanto o RewriteMap
uso 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 -D
ou 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
Define
e ${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]
.