Autenticação Apache: permite acesso público a um subdiretório


13

Provavelmente, este é um problema simples, mas não consigo encontrar a solução na documentação.

Quero proteger meu site com senha usando autenticação BASIC. Mas eu quero que um subdiretório não seja protegido:

http://mysite.com/ -> BASIC protected
http://mysite.com/somedir -> BASIC protected
http://mysite.com/someotherdir -> BASIC protected
http://mysite.com/public -> not protected

Não tenho nenhum problema em proteger todo o site, mas não sei como posso "desproteger" um diretório. O site está hospedado em um host compartilhado, portanto, só tenho acesso aos arquivos .htaccess para fazer a configuração.

Existe uma diretiva para negar a autenticação?

Obrigado pela ajuda ...


Esta parece ser a solução mais correta: stackoverflow.com/questions/2641646/...
BryanK

Respostas:


10

Não deve ser um problema com .htaccess, dependendo do que o host permitiu.

Você pode tentar colocar um .htaccess na subpasta com o seguinte, embora as substituições precisem ser ativadas para os diretórios em que está.

 Allow From All
 Satisfy Any

1
O segredo aqui, o IIRC, é colocar o .htaccess na raiz do seu site, mas ter uma entrada nesse arquivo .htaccess como o que o Cylindric fala.
21715 Paul Lathrop

E não esqueça de adicionar (ou garantir que exista) um AllowOverride para que o .htaccess seja usado.
27630 TCampbell

1
@Paul - Excluí minha resposta, mas a resposta da AFAICR Cylindric está errada no momento? Um arquivo .htaccess em um subdiretório não pode substituir um acima. No entanto, o arquivo .htaccess no diretório pai também pode incluir controles (ou mesmo removê-los) para subdiretórios.
Alnitak

Tentei colocar uma diretiva <Directory /> na pasta raiz e na pasta que quero que seja pública, mas nos dois casos recebo um HTTP 500. Alguma outra idéia?
Guillaume

1
Você não pode usar o <Directory> no .htaccess, embora possa usar <Files> e <Location>
Alnitak

7

OK, para um caminho server.com/private/public:

server.com/private/.htaccess

AuthType Basic
AuthName "Private, keep out."
Require...

server.com/private/public/.htaccess

Allow From All
Satisfy Any

A chave aqui é 'Satisfazer qualquer um' que ORs os requisitos do upstream juntos. 'Satisfazer tudo' é o padrão.


Thx para explicar 'Satisfazer Qualquer' 👍
Mario

1

Eu acredito que isso pode fazer isso:

# put the global auth stuff here
...

# put the override here
<Location /public>
Allow from All
Satisfy Any
</Location>

Nunca é uma boa ideia usar <Location> s para controle de acesso. Ele controla apenas o acesso através de um nome, e não o próprio recurso. Portanto, qualquer coisa que forneça acesso a ele por um nome diferente (Alias, por exemplo) não terá controle de acesso aplicado a ele.
CK.

1
@CK Na verdade, você deve usar o Location se o local em questão não for um diretório físico, mas apenas um diretório "virtual" disfarçado por algo como mod_rewrite.
Natalie Adams

0

Eu consegui resolver isso fazendo isso:

<Directory "/path/to/maindirectory">
[... auth stuff ... ]
</Directory>

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
</Directory>

NÃO use Locais, porque eles são feitos para diferenciar maiúsculas de minúsculas e não agem no acesso real à pasta, mas apenas sobre o URL.

Então, por exemplo, se eu escrever

http:/mywebsite/STUFF

ou

http://mywebsite/stuff

ou

http://mywebsite/StUfF

é diferente para o controle de localização, mesmo que o diretório físico chamado seja o mesmo !!!

Em resumo, você verifica o acesso ao diretório "coisas" e posso escrevê-lo com outro caso.

Além disso, o uso do arquivo .htaccess em um único diretório com controle de localização em outras pessoas não funcionou para mim.

Espero que ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.