Autenticazione Apache: consente l'accesso pubblico a una sottodirectory


13

Questo è probabilmente un problema semplice, ma non riesco a trovare la soluzione nella documentazione.

Voglio proteggere con password il mio sito Web usando l'autenticazione BASIC. Ma voglio che una sottodirectory non sia protetta:

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

Non ho problemi a proteggere tutto il sito, ma non so come posso "non proteggere" una directory. Il sito è ospitato su un host condiviso, quindi ho accesso solo ai file .htaccess per eseguire la configurazione.

Esiste una direttiva per negare l'autenticazione?

Grazie per l'aiuto ...


Questa sembra essere la soluzione più corretta: stackoverflow.com/questions/2641646/...
BryanK

Risposte:


10

Non dovrebbe essere un problema con .htaccess, a seconda di ciò che l'host ha permesso.

Potresti provare a mettere un .htaccess nella sottocartella con quanto segue, sebbene le sostituzioni dovranno essere abilitate per le directory in cui si trova.

 Allow From All
 Satisfy Any

1
La salsa segreta qui, IIRC, è mettere il .htaccess alla radice del tuo sito, ma avere una voce in quel file .htaccess come quella di cui parla Cylindric.
Paul Lathrop,

E non dimenticare di aggiungere (o assicurarsi che esista) un AllowOverride in modo da utilizzare .htaccess.
TCampbell,

1
@Paul - Ho eliminato la mia risposta, ma la risposta di AFAICR Cylindric è attualmente errata? Un file .htaccess in una sottodirectory non può sovrascrivere quello superiore. Tuttavia, il file .htaccess nella directory padre può anche includere controlli (o effettivamente rimuoverli) per le sottodirectory.
Alnitak,

Ho provato ad inserire una direttiva <Directory /> nella cartella principale e nella cartella che voglio essere pubblica, ma in entrambi i casi ricevo un HTTP 500. Altre idee?
Guillaume,

1
Non puoi usare <Directory> in .htaccess, anche se puoi usare <Files> e <Location>
Alnitak,

7

OK, per un percorso 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

La chiave qui è 'Satisfy Any' che OR soddisfa i requisiti a monte insieme. 'Soddisfa tutto' è l'impostazione predefinita.


Grazie per aver spiegato 'Satisfy Any' 👍
Mario,

1

Credo che questo potrebbe farlo:

# put the global auth stuff here
...

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

Non è mai una buona idea usare <Location> s per il controllo degli accessi. Controlla l'accesso solo tramite un nome, piuttosto che dalla risorsa stessa. Pertanto, tutto ciò che fornisce l'accesso ad esso tramite un nome diverso (Alias, ad esempio) non ha alcun controllo di accesso applicato ad esso.
CK.

1
@CK In realtà è necessario utilizzare Location se la posizione in questione non è una directory fisica ma semplicemente una directory "virtuale" mascherata da qualcosa come mod_rewrite.
Natalie Adams,

0

Sono riuscito a risolvere questo facendo questo:

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

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

NON utilizzare Posizioni, perché sono fatti distinzione tra maiuscole e minuscole e non agiscono sull'accesso effettivo alla cartella, ma solo sull'URL.

Quindi, per esempio, se scrivo

http:/mywebsite/STUFF

o

http://mywebsite/stuff

o

http://mywebsite/StUfF

è diverso per il controllo della posizione, anche se la directory fisica chiamata è la stessa !!!

In breve, si controlla l'accesso per la directory "roba" e posso metterlo per iscritto con un caso diverso.

Inoltre, l'uso del file .htaccess in una singola directory con controllo della posizione su altri non ha funzionato per me.

Spero che sia d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.