AuthUserFile path relativo à raiz do host virtual?

3

Dada esta estrutura de pastas / arquivos:

private/.htpasswd
public/.htaccess

... onde public é a pasta raiz de um host virtual no Apache e private é sua pasta de irmãos:

Como defino um caminho relativo para AuthUserFile no arquivo .htaccess , de modo que ele possa acessar /private/.htpasswd

Eu tentei:

AuthType Basic 
AuthUserFile ../private/.htpasswd
require valid-user

Mas isso não funciona, porque ele tenta encontrar o arquivo relativo ao ServerRoot, em vez de relativo a raiz do host virtual.

Não terei acesso ao arquivo de configuração no servidor de produção (host compartilhado) e não quero definir um caminho absoluto, porque minhas estruturas de sistema de arquivos de teste e de produção não correspondem.

Ainda é possível conseguir o que eu quero, dadas essas condições?

    
por Decent Dabbler 20.09.2011 / 23:06

4 respostas

1

Você pode usar o symlink no sistema de teste, por exemplo /srv/www/vhost/private/.htpasswd -> /var/www/vhost/private/.htpasswd . O primeiro caminho precisa ser o mesmo que no servidor de produção. Então você poderá usar os mesmos caminhos nos dois servidores. Options FollowSymLinks pode ser necessário para isso. Eu não vejo nenhuma maneira de incluir arquivos de configuração não relativamente ao ServerRoot.

    
por 20.09.2011 / 23:22
1

Se a solução de link simbólico publicada por Selivanov Pavel não funcionar, você poderá desabilitar as diretivas Auth no .htaccess usando ALlowOverride -AuthConfig (ou desativar o .htaccess) e mover a configuração de Auth para o Apache conf somente na sua máquina local.

    
por 20.09.2011 / 23:52
1

Vamos dar um exemplo.

Sua aplicação está localizada em / var / www / myApp em algum servidor Linux

.htaccess : /var/www/myApp/.htaccess

htpasswdApp : / var / www / myApp / htpasswdApp . (Você está livre para usar qualquer nome para o arquivo .htpasswd )

Para usar o caminho relativo em .htaccess :

AuthType Digest
AuthName myApp
AuthUserFile "htpasswdApp"
Require valid-user

Mas ele procurará pelo arquivo no diretório server_root . Não está em document_root .

No caso em questão, quando o aplicativo está localizado em / var / www / myApp :

document_root é / var / www / myApp

server_root é / etc / apache2 // (apenas no nosso exemplo, porque usamos o servidor linux )

Você pode redefini-lo no arquivo de configuração do apache ( /etc/apache2/apache2.conf ), mas acho que é uma má idéia.

Para usar o caminho de arquivo relativo em seu /var/www/myApp/.htaccess , defina o arquivo da senha em seu server_root .

Eu prefiro fazer isso seguindo o comando:

sudo ln -s /var/www/myApp/htpasswdApp /etc/apache2/htpasswdApp

Você está livre para copiar meu comando, usar um link físico em vez de símbolo ou copiar um arquivo para seu server_root .

    
por 02.10.2015 / 11:36
0

Sem um líder / , o caminho fornecido para AuthUserFile é relativo a ServerRoot . Seu diretório privado terá um caminho relativo ao ServerRoot, então apenas forneça isso - dado

ServerRoot /var/www

e um diretório provado em

/var/www/some/path/private

então

AuthUserFile some/path/private

deve funcionar.

    
por 20.09.2011 / 23:25