Como devo usar a diretiva If em .htaccess?

13

Estou tentando adicionar uma instrução condicional usando a diretiva If do Apache em meu arquivo .htaccess.

Eu referenciei esta página link mas ela não elabora muito / dá muitos exemplos. Dois exemplos incompletos são:

<If %{REQUEST_METHOD} IN GET,HEAD,OPTIONS> 

e

<If "$req{Host} = ''"> 

Então eu tentei adicionar isso ao meu arquivo .htaccess:

<If %{SERVER_PORT} IN GET,HEAD,OPTIONS>
   #nothing here yet
</If>

Mas continuo recebendo Erro 500 quando tento carregar a página. Isso está na minha instalação local e estava funcionando bem anteriormente (ou se eu removesse esse código). Eu acredito que eu tenho AllowOverride All configurado globalmente, e o contexto para a diretiva If deve deixá-lo presente em .htaccess ("Contexto: configuração do servidor, host virtual, diretório, .htaccess").

Alguém pode me dar alguns exemplos de como usar corretamente o < If > diretiva, ou alguma orientação sobre o motivo pelo qual não está funcionando para mim?

Obrigado!

    
por cwd 22.02.2011 / 21:03

2 respostas

15

A diretiva <If> está disponível somente no Apache 2.4+ e não no 2.2 ou anterior.

link

Documentação não presente no 2.2:

link

    
por 22.02.2011 / 21:39
7

<If> está disponível apenas no Apache 2.4+, portanto, primeiro, verifique se você tem essa versão.

Exemplos

# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
  Redirect permanent "/" "http://www.example.com/"
</If>

<If "%{HTTP_HOST} =~ /regex/">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

<If "%{REQUEST_URI} =~ m#/regex/including/slashes/#">
  SecFilterEngine Off
  SecFilterScanPOST Off
</If>

Alternativas para <If>

Existem algumas outras soluções para fazer instruções condicionais no Apache 2.2, se você ainda estiver preso a isso.

  • Você pode definir variáveis de ambiente por meio de:

    • Configuração do Apache
    • SetEnvIf
    • RewriteMatch do mod_rewrite
  • Em seguida, você pode executar instruções condicionais usando

    <IfDefine MyEnvironmentVar>
       ...
    </IfDefine>
    

Exemplo:

# Set environment variable if we're on staging site
SetEnvIf Host staging ROBOTS_NOINDEX

# Set environment variable if we're within a specific folder
SetEnvIf Request_URI ^/app/webroot/files/ ROBOTS_NOINDEX

# Send custom header if environment variable is set
Header set X-Robots-Tag "noindex" ENV=ROBOTS_NOINDEX
    
por 02.05.2017 / 05:12