2012-01-02 20 views
11

Mam katalog chroniony przez htaccess. Oto kod, którego teraz używam:Wyklucz jeden folder w chronionym katalogu htaccess

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

To działa poprawnie. Jednakże mam teraz katalog wewnątrz tego folderu, który chciałbym umożliwić każdemu dostęp, ale nie jestem pewien jak to zrobić.

Wiem, że możliwe jest po prostu przeniesienie plików poza chroniony katalog, ale aby zrobić długą historię, folder musi pozostać wewnątrz chronionego folderu, ale powinien być dostępny dla wszystkich.

Jak mogę ograniczyć dostęp do folderu, ale zezwolić na dostęp do podfolderu?

Odpowiedz

11

Zgodnie z this article możesz to zrobić, używając SetEnvIf. Dopasowujesz każdy z folderów i plików, do których chcesz uzyskać dostęp grand, i definiujesz dla nich zmienną środowiskową "allow". Następnie dodajesz warunek, który umożliwia dostęp, jeśli ta zmienna środowiskowa jest obecna.

Musisz dodać następujące dyrektywy do swojego .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

dzięki za pomoc! –

+0

@SherwinFlight Postępuję zgodnie z powyższym kodem, ale wciąż pytam hasła, jak wykluczyć katalog do przesyłania zdjęć – Nullpointer

+0

dzięki człowiekowi, wciąż działa. –

24

Wystarczy utworzyć plik .htaccess w katalogu z treścią:

Satisfy any

+3

To może zadziałać, ale co jeśli nie ma katalogu z powodu rzeczy 'mod_rewrite'. – janw

+0

Umieść to w bloku Greg

0

Nie ma potrzeby, aby stworzyć .htaccess w podkatalogu.

Wystarczy stworzyć tak wiele zmiennych, jak trzeba z SetEnvIf dyrektywy, i upewnij się, że nazwa pliku lub ścieżka chcesz allw/zaprzeczyć jest częścią regex URI możesz przekazać do SetEnvIf, dokładnie tak jak @ Sumurai8 powiedział , ale ustaw regex zgodnie z Twoimi potrzebami, ponieważ identyfikator URI powinien się zaczynać/kończyć/zawierać zestaw znaków ............

0

Przyjęta odpowiedź nie wydaje się dobrze działać z nowymi Wersje Apache, ponieważ przestały działać, gdy tylko aktualizacje Apache zostały wdrożone na niektórych serwerach moich klientów.

polecam następujące podejście:

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

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

<RequireAny> 
    Require env ALLOW 
    Require valid-user 
</RequireAny> 
Powiązane problemy