Proteggi con password una directory, ma non i file di quella directory?


8

Mi chiedevo solo se fosse possibile proteggere una directory con una combinazione nome utente / password usando i file .htaccess e .htpasswd, ma non proteggere i file all'interno. cioè Uno è in grado di collegare, per esempio, le immagini all'interno di quella directory agli amici, ma la navigazione della directory stessa non sarebbe consentita senza un nome utente / password. Grazie a tutti in anticipo.

Risposte:


9

Prova questo nel tuo .htaccess:

Require valid-user

<Files ?*>
    Order allow,deny
    Allow from all
    Satisfy any
</Files>

Qui Require valid-userrichiede qualsiasi accesso noto. Quindi si modifica questa restrizione per i file con almeno un carattere nel loro nome - questo è ciò che corrisponderà al modello glob ?*per la <Files>sezione -, il che significa che le regole allegate si applicano ai file, ma non alle directory.

Nelle regole modificate per i file, la chiave è Satisfy any. Permette l'autorizzazione soddisfatto sia le credenziali o l'indirizzo IP. Quindi si consente il passaggio di qualsiasi indirizzo IP, quindi le richieste sono sempre autorizzate.

Quindi ora sfogliare questa directory o una delle sue sottodirectory richiederà un login, ma il recupero diretto di un file non lo farà.

Qual è quello che volevi.


0

Sì, puoi proteggere file e directory per nome o modello. Dovresti già usarlo per limitare l'accesso ai file .ht *. Controlla la tua configurazione di Apache. Il modello di file richiesto sarà probabilmente '/ $'.


0

Utilizzare LocationMatchper limitare le cose auth all'indice di directory.


<LocationMatch "/ pictures"> AuthUserFile /home/asdasd/public_html/user5678/pictures/.htpasswd AuthGroupFile / dev / null AuthName "Directory riservata" AuthType Basic </LocationMatch> <Limit GET POST> richiedi utente valido </Limit> Questo è il mio attuale file .htaccess, che si trova in / pictures. C'è qualcosa che sto facendo di sbagliato? Questo sembra restituire un errore del server interno 500.

a) leggere LocationMatch, richiede una regex. b) Devi mettere l' require valid-userinterno nel LocationMatchblocco ovviamente (perché Limitcomunque la dichiarazione?)
Marian,

0

Si desidera semplicemente disattivare la visualizzazione di Apache nell'indice della cartella. Metti questo nel .htaccess:

Options -Indexes

In questo modo quando gli utenti visitano http://www.url.com/folder/, viene visualizzato un errore di elenco di directory negato . Ma quando visitano http://www.url.com/folder/file.jpgpossono vedere il file.


1
Non è stato chiesto, questo disabilita gli elenchi, non la password li protegge
Krzysztof Bociurko

-1

Se si desidera che l'elenco delle directory sia visibile solo agli utenti autorizzati ma si permetta a chiunque di scaricare un file (in modo da poter inviare collegamenti alle persone), è necessario uno script di qualche tipo (PHP, ASP, ecc.) Che richieda all'utente una password e se la ottengono correttamente visualizza il contenuto della directory. Dovresti mettere questo script nella directory e chiamarlo come index.php in modo che venga servito anziché apache generando un indice di directory.


-1

Sì. Aggiungi un file index.html che elenca il contenuto della cartella e limita l'accesso a quel file con .htaccess. Se si desidera che l'indice sia dinamico, è necessario utilizzare una sorta di script (o inclusione lato server) per generare l'indice.


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.