Como faço para SetEnv apenas para um IP específico no Apache?

3

Eu quero definir algum ambiente apenas para um IP específico, como fazer isso no Apache?

    
por linux 14.07.2011 / 04:10

2 respostas

3

Consulte a diretiva SetEnvIf , que define variáveis de ambiente com base em atributos de a solicitação, como Remote_Addr (o endereço IP do cliente que faz a solicitação) ...

SetEnvIf Remote_Addr ^192\.168\.0\. LOCAL_LAN=1

... ou Server_Addr (o endereço IP do servidor no qual a solicitação foi recebida) ...

SetEnvIf Server_Addr ^192\.168\.0\.1$ SITE_PROFILE=PRODUCTION
SetEnvIf Server_Addr ^192\.168\.0\.2$ SITE_PROFILE=DEVELOPMENT

Note que o segundo argumento para SetEnvIf é uma expressão regular, por isso seja extremamente consciente se você for tentado a usar IPs nus, como um padrão como 192.168.1.1 (embora pareça muito mais limpo do que pontos que escapam, como eu acima) também será compatível com 192.168.101.10.

ATUALIZAÇÃO:

SetEnvIf não pode acessar QUERY_STRING, mas pelos documentos : -

See the RewriteCond directive of mod_rewrite for extra information on how to match your query string.

Então, algo como ...

RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.
RewriteCond %{QUERY_STRING} (^|&)debug=
RewriteRule . - [E=LOCAL_LAN_AND_DEBUG:1]
    
por 14.07.2011 / 05:33
0

Em Apache 2.4 você pode definir uma variável de ambiente para um único endereço IP ou um todo sub-rede usando a notação CIDR. Por exemplo:

<If "-R '93.184.216.34'">
  SetEnv myvar1=example
</If>

<If "-R '93.184.216.0/24'">
  SetEnv myvar2=subnet
</If>

Eles também podem ser combinados com operadores lógicos dentro da expressão:

<If "-R '93.184.216.34' || 
     -R '192.0.32.0/24'">
  SetEnv myvar3=both
</If>
    
por 18.06.2015 / 17:23

Tags