Como executar o script antes da autenticação básica do Apache?

1

Eu preciso proteger um local com o htpasswd e que está funcionando bem com :

<Location /myloc>
    AuthType Basic
    AuthName "My Protected Area"
    AuthUserFile .htpasswd
    Require valid-user
</Location>

Mas, de alguma forma, preciso ignorar esse Auth, por exemplo, para url / myloc / loc1, mas não para / myloc / loc2. A razão para isso é que eu quero ser capaz de obter, por exemplo loc1 e fazer alguma pesquisa no banco de dados. Por exemplo:

"select Status From table where url=/myloc/requested_loc" (loc1 or loc2 or any name)
if Status == 1
   return 1
else 
   return 0

Assim, os cenários são os seguintes:

  1. executa algum scritp antes dos navegadores solicitarem user / pass
  2. se o script retornar 0 prompt para usuário / passagem Se o script retornar 1, não solicite usuário / senha e local aberto

Algumas ideias: 1. Eu estava pensando em modificar o link mas não tenho certeza se é uma boa ideia (tenho certeza que é uma ideia terrível).

  1. Para ter algumas ScriptAlias / myloc /opt/script.py que verificarão o que eu preciso no banco de dados e, em seguida, se eu abrir um local se 2 enviar para o navegador 401 auth necessário.

E aí minhas ideias terminam.

Não estou à procura de solução, apenas algumas ideias de que direção seguir.

SOLUÇÃO E ATUALIZAÇÃO

Eu sou tão idiota que não vou fazer o Auth on / myloc. Eu farei Auth em arquivos criados dinamicamente loc1.conf, loc2.conf e assim por diante, e então eu irei incluí-lo na configuração do host virtual do apache.

<VirtualHost *:80>
  domain 
  ......
  Include /path/loc1.conf
  Include /path/loc2.conf
  ....
</VirtualHost>

@HBruijn me deu essa ideia.

    
por pregmatch 06.08.2015 / 23:31

1 resposta

1

Você precisa investigar como o Apache mescla as diretivas e define a precedência .

As seções

<Location> são processadas na ordem em que aparecem no arquivo de configuração então algo como o seguinte deve permitir o acesso de visitantes não autorizados / não autenticados / myloc / loc1 /:

<VirtualHost *:80>
    ServerName example.org
    DocumentRoot /var/www/

    <Location /myloc/loc1/>   
            Order allow,deny
            Allow from all
    </Location> 
    <Location /myloc/>   
            AuthType Basic
            AuthName "My Protected Area"
            AuthUserFile .htpasswd
            Require valid-user
    </Location> 
</VirtalHost>

Do Apache 2.3 você pode usar contêineres de autorização para expressar uma lógica de autorização mais complexa.

    
por 06.08.2015 / 23:42