Como posso usar SetEnvIf para definir uma variável com base no host HTTP?

10

Estou tentando definir uma variável no Apache

ENV = DEV se o host http for o URL de desenvolvimento

ou

ENV = PRD se o host http for o URL prd

e, em seguida, use $ _SERVER ['ENV'] para criar alguns ramos lógicos

Até agora, nenhum deles funcionou para mim e nós temos o módulo setenvif instalado

SetEnvIfNoCase Referer
SetEnvIfNoCase Remote_Host

Qual é o jeito certo de fazer isso?

    
por qodeninja 25.01.2011 / 02:31

1 resposta

15

Analisando rapidamente a documentação :

The SetEnvIf directive defines environment variables based on attributes of the request. The attribute specified in the first argument can be one of three things:

An HTTP request header field (see RFC2616 for more information about these); for example: Host, User-Agent, Referer, and Accept-Language. A regular expression may be used to specify a set of request headers.

Portanto, é certamente possível tornar uma variável de ambiente condicional no cabeçalho Host . Parece que você está tentando usar os cabeçalhos Referer ou Remote_Host , nenhum dos quais é exatamente o que você deseja (embora, em teoria, Referer deva conter o valor do cabeçalho Host na maioria dos casos). Remote_Host seria o nome do host do cliente fazendo a requisição, o que não é o que você quer (e na maioria das configurações simplesmente não estaria disponível, já que é típico ter pesquisas de DNS desativadas para razões de desempenho).

Tente algo assim:

SetEnvIf Host "www-dev\.example\.com" ENV=DEV
SetEnvIf Host "www-production\.example\.com" ENV=PRD

...and then use $_SERVER['ENV'] to create some logic branches

Mas note também que você pode simplesmente referenciar o valor do cabeçalho Host diretamente no PHP sem passar por essa chicanagem; $_SERVER['HTTP_HOST'] terá exatamente o que você deseja.

    
por 25.01.2011 / 02:39

Tags