2012-01-02 13 views
11

Ho una directory protetta da htaccess. Ecco il codice che uso ora:Escludere una cartella nella directory protetta da htaccess

AuthName "Test Area" 
Require valid-user 
AuthUserFile "/***/.htpasswd" 
AuthType basic 

Questo sta funzionando bene. Tuttavia, ora ho una directory all'interno di questa cartella che vorrei consentire a chiunque di accedere, ma non sono sicuro di come farlo.

So che è possibile spostare semplicemente i file all'esterno della directory protetta, ma per farla breve la cartella deve rimanere all'interno della cartella protetta, ma essere accessibile a tutti.

Come posso limitare l'accesso alla cartella, ma consentire l'accesso alla sottocartella?

risposta

11

In base a this article è possibile eseguire ciò utilizzando SetEnvIf. Si abbina ciascuna delle cartelle e dei file a cui si desidera un grande accesso e si definisce una 'variabile' di ambiente per loro. Quindi aggiungi una condizione che consente l'accesso se è presente questa variabile di ambiente.

È necessario aggiungere le seguenti direttive al proprio .htaccess.

SetEnvIf Request_URI "(path/to/directory/)$" allow 
SetEnvIf Request_URI "(path/to/file\.php)$" allow 
Order allow,deny 
Allow from env=allow 
Satisfy any 
+0

Grazie per il vostro aiuto! –

+0

@SherwinFlight Seguo il codice sopra ma sto ancora chiedendo la password, come escludere la directory per caricare le immagini – Nullpointer

+0

grazie amico, ancora funzionante. –

24

basta creare un file .htaccess nella sottodirectory con il contenuto:

Satisfy any

+3

Che può funzionare, ma cosa succede se non c'è una directory a causa di cose 'mod_rewrite'. – janw

+0

Mettilo in un blocco Greg

0

Non v'è alcuna necessità di creare un .htaccess nella sottodirectory.

Basta creare il maggior numero di variabili di cui hai bisogno con SetEnvIf direttiva, e assicurarsi che il nome del file o il percorso che si desidera allw/negare è parte della regex URI si passa alla SetEnvIf, esattamente come @ Sumurai8 detto , ma imposta la regex in base alle tue esigenze, perché l'URI dovrebbe iniziare/finire/contenere un set di caratteri ............

0

La risposta accettata non sembra funzionare bene con le nuove Versioni di Apache, dal momento che ha smesso di funzionare non appena gli aggiornamenti di Apache sono stati implementati su alcuni dei miei server clienti.

vi consiglio il seguente approccio:

AuthType Basic 
AuthName "NO PUBLIC ACCESS" 
AuthUserFile /xxx/.htpasswd 

SetEnvIf REQUEST_URI "(path/to/directory/)$" ALLOW 

<RequireAny> 
    Require env ALLOW 
    Require valid-user 
</RequireAny> 
Problemi correlati