Definir condicionalmente uma variável de ambiente do Apache

3

Gostaria de definir condicionalmente o valor de uma variável de ambiente Apache2 e atribuir um valor padrão se uma das condições não for atendida. Este exemplo, se uma simplificação do que estou tentando fazer, mas, de fato, se a parte do subdomínio do nome do host é hr, finanças ou marketing eu quero definir um ambiente var chamado REQUEST_TYPE para 2, 3 ou 4, respectivamente. Caso contrário, deve ser 1. Eu tentei a seguinte configuração no httpd.conf:

<VirtualHost *:80>
  ServerName     foo.com
  ServerAlias    *.foo.com
  DocumentRoot   /var/www/html

  SetEnv REQUEST_TYPE 1
  SetEnvIfNoCase Host  ^hr\.         REQUEST_TYPE=2
  SetEnvIfNoCase Host  ^finance\.    REQUEST_TYPE=3
  SetEnvIfNoCase Host  ^marketing\.  REQUEST_TYPE=4
</VirtualHost>

No entanto, a variável é sempre atribuída a um valor de 1. A única maneira que até agora tenho conseguido fazê-lo funcionar é substituir:       SetEnv REQUEST_TYPE 1 com uma expressão regular contendo uma aparência negativa:       SetEnvIfNoCase Host ^ (?! hr. | Finance. | Marketing.) REQUEST_TYPE = 1

Existe uma maneira melhor de atribuir o valor padrão de 1? À medida que adiciono mais condições de subdomínio, ou se eu permitir que outro atributo de solicitação afete o REQUEST_TYPE (por exemplo, se Remote_Addr = 192.168.1. [100-150] e REQUEST_TYPE = 5), a expressão regular com a aparência negativa pode ficar feia e difícil para gerenciar.

    
por Tim McLaughlin 21.05.2010 / 15:21

1 resposta

7

Portanto, parece que não é possível reatribuir uma variável de ambiente. Mas você pode testar se a variável está definida, se não, defina como o valor padrão.

SetEnvIfNoCase Host            ^hr\.         REQUEST_TYPE=2
SetEnvIfNoCase Host            ^finance\.    REQUEST_TYPE=3
SetEnvIfNoCase Host            ^marketing\.  REQUEST_TYPE=4
SetEnvIf       REQUEST_TYPE    ^$            REQUEST_TYPE=1
    
por 21.05.2010 / 15:44

Tags