instruções condicionais do apache - qual é a ordem de processamento?

1

Eu tento proteger o acesso a um subdiretório por http auth usando a configuração do arquivo .htaccess.

Este é o código de trabalho completo do apache 2.4 no meu caso.

# Conditionally set environment variable BACKEND_PROTECTION (version for apache 2.4)

<If "%{HTTP_HOST} == 'www.somedomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
</If>
<If "%{HTTP_HOST} == 'www.someotherdomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
</If>

<RequireAny>
  <RequireAll>
    Require not env BACKEND_PROTECTION
    Require all granted
  </RequireAll>
  <RequireAll>
    AuthType Basic
    AuthName "Protected URI"
    AuthUserFile /var/www/config/.htpasswd
    Require valid-user
  </RequireAll>
</RequireAny>

Agora eu preciso excluir adicionalmente um subdiretório desse diretório da autenticação, então é isso que eu tentei.

<If "%{HTTP_HOST} == 'www.somedomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
</If>
<If "%{HTTP_HOST} == 'www.someotherdomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
</If>

# disable protection for backend files loaded in frontend
SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION

Mas isso não funciona, depois desse código, o seguinte <RequireAny> block from above aciona a autenticação http como se BACKEND_PROTECTION ainda estivesse definido. Mas se eu colocar a negação dentro de <If></If> , isso funciona como esperado.

<If "%{HTTP_HOST} == 'www.somedomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
    SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION
</If>
<If "%{HTTP_HOST} == 'www.someotherdomain.de'">
    SetEnvIf REQUEST_URI "^/typo3/" BACKEND_PROTECTION
    SetEnvIf REQUEST_URI "^/typo3/sysext/" !BACKEND_PROTECTION
</If>

Por que é assim? O que a seguinte declaração tirada da Documentação If significa exatamente?

Description: Contains directives that apply only if a condition is satisfied by a request at runtime

O outro código dentro de .htacces não é processado durante o mesmo tempo de execução? Ou apenas em um estágio anterior desse tempo de execução durante algum tipo de etapa de pré-compilação?

    
por Artur Cichosz 04.11.2016 / 13:14

0 respostas