Como remover a proteção por senha .htaccess de um subdiretório

97

Tenho protegido por senha todo o meu site usando, .htaccessmas gostaria de expor um dos subdiretórios para que possa ser visualizado sem uma senha.

Como posso desativar a proteção por senha htaccess para um subdiretório? Especificamente, qual é a .htaccesssintaxe.

Aqui está meu .htaccessarquivo que está localizado na raiz do meu ftp.

AuthName "Administrador do site"
AuthUserFile /dir/.htpasswd
AuthGroupFile / dev / null

AuthName seguro
AuthType Basic
requer usuário nomedeusuário1
pedido permitir, negar
permitir de todos
Justinl
fonte
4
Isso pode ser mais adequado para serverfault.
início de

Respostas:

154

Você precisa criar um novo .htaccessarquivo no diretório necessário e incluir a Satisfy anydiretiva nele, para até o Apache 2.3:

# allows any user to see this directory
Satisfy Any

A sintaxe mudou no Apache 2.4, isso tem o mesmo efeito:

Require all granted
RageZ
fonte
7
Eu só poderia fazer isso funcionar com Allow from allnão Satisfy Any.
Jess Telford,
@JessTelford bom uso do snippet de código. @RageZ +1 pela resposta que funcionou para mim. Você poderia editar a resposta para ser super simples e postá-la usando o método de trecho de código. Caso contrário, alguém terá que pensarthanks
Jesse Burcsik
2
@JessTelford Satisfy Anyestá funcionando e foi soletrado incorretamente como Satisify Any. Pode ser que seja por isso que não funcionou para você.
BlueBird de
1
Eu precisava ter um único arquivo desprotegido (todo o resto protegido), feito o mesmo na seção <Arquivos>
Nick
Isso não funciona para mim - eu ainda recebo a senha modal pedindo nome de usuário e pwd .. Usando o firefox e windows 7 ... Alguém tem alguma idéia?
ItsMeDom
36

Somando-se à resposta de RageZ, usei isso nas diretivas do servidor:

<Directory /var/www/protected/>
     AuthType Basic
     AuthName "Production"
     AuthUserFile /path/to/.htpasswd
     Require valid-user
</Directory>

<Directory /var/www/protected/unprotected>
     Satisfy Any
</Directory>

Impressionante. Obrigado RageZ!

atônico
fonte
9

Basta criar um novo .htaccessno subdiretório desejado com esta diretiva:

Allow from all

Você pode restringir ao seu IP apenas com:

Allow from x.x.x.x

Veja: http://httpd.apache.org/docs/current/mod/mod_access_compat.html

Paul Rad
fonte
Funcionou quando coloquei "Exigir todos concedidos" em vez de "Permitir de todos" e "Satisfazer todos". Esses dois não funcionaram para mim. Estou no Apache 2.4.
endo64,
1

Você precisa adicionar outro arquivo .htaccess ao subdiretório que substitui a autenticação. .htaccess em cascata para cima, ou seja, ele irá procurar na pasta atual, então irá subir um nível e assim por diante.

Fenton
fonte
4
por acaso você conhece a sintaxe? Eu entendo o conceito, mas não sei como implementá-lo.
justinl
Se você deseja remover o atual e não usar permissões, basta substituí-lo por um arquivo vazio chamado .htaccess
Gaʀʀʏ
3
@Garry não é assim que o cascateamento .htaccess funciona, você tem que substituir explicitamente as opções.
William Denniss,
1

Esta é uma maneira de permitir o subdiretório "foo" por meio da autenticação básica do arquivo .htaccess principal em um site:

AuthType Basic
AuthName "Password Required"
AuthUserFile /dir/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/foo/#
Require valid-user

Nota: Isso funciona no Apache 2.4. Não confirmei para versões anteriores.

PeterA
fonte
0

Se você quiser evitar qualquer directoty específico da autenticação htaccess, você pode usar o código a seguir em seu arquivo htaccess na parte superior.

AuthType Basic AuthName "Enter Pass" AuthUserFile /home/public_html/.htpasswd /*PATH TO YOUR .htpasswd FILE*/ Require valid-user SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow Order allow,deny Allow from env=allow

Além disso, se você quiser evitar vários diretórios, adicione

SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow

quantas vezes forem necessários diretórios, você deseja remover da prevenção htaccess.

Mohd Jafar
fonte