Jak usunąć ochronę hasłem .htaccess z podkatalogu

97

Cała moja witryna została zabezpieczona hasłem, .htaccessale chciałbym ujawnić jeden z podkatalogów, aby można go było przeglądać bez hasła.

Jak mogę wyłączyć ochronę hasłem htaccess dla podkatalogu? Dokładnie jaka jest .htaccessskładnia.

Oto mój .htaccessplik, który jest umieszczony w katalogu głównym mojego ftp.

AuthName „Administracja witryny”
AuthUserFile /dir/.htpasswd
AuthGroupFile / dev / null

AuthName jest bezpieczne
AuthType Basic
wymagaj nazwy użytkownika 1
zamówienie pozwala, odmawia
zezwolić wszystkim
justinl
źródło
4
To może być lepiej dostosowane do awarii serwera.
zaczyna się

Odpowiedzi:

154

Musisz utworzyć nowy .htaccessplik w wymaganym katalogu i dołączyć do niego Satisfy anydyrektywę w ten sposób, aż do Apache 2.3:

# allows any user to see this directory
Satisfy Any

Składnia zmieniła się w Apache 2.4, ma to ten sam efekt:

Require all granted
RageZ
źródło
7
Mogłem tylko zmusić to do pracy z Allow from allnie Satisfy Any.
Jess Telford
@JessTelford dobre wykorzystanie fragmentu kodu. @RageZ +1 dla odpowiedzi, która zadziałała dla mnie. Czy możesz edytować odpowiedź, aby była super prosta i opublikować ją za pomocą metody fragmentu kodu. Inaczej ktoś będzie musiał pomyślećthanks
Jesse Burcsik
2
@JessTelford Satisfy Anydziała i został nieprawidłowo zapisany jako Satisify Any. Może to jest powód, dla którego to nie zadziałało.
BlueBird
1
Musiałem mieć niezabezpieczony pojedynczy plik (wszystko inne chronione), zrobiony tak samo w sekcji <Files>
Nick
To nie działa dla mnie - nadal otrzymuję modalne hasło z pytaniem o nazwę użytkownika i pwd .. Używając Firefoxa i Windows 7 ... Masz jakiś pomysł?
ItsMeDom
36

Dodając do odpowiedzi RageZ, użyłem tego w dyrektywach serwera:

<Directory /var/www/protected/>
     AuthType Basic
     AuthName "Production"
     AuthUserFile /path/to/.htpasswd
     Require valid-user
</Directory>

<Directory /var/www/protected/unprotected>
     Satisfy Any
</Directory>

Niesamowite. Dzięki RageZ!

atonyc
źródło
9

Po prostu utwórz nowy .htaccessw wybranym podkatalogu za pomocą tej dyrektywy:

Allow from all

Możesz ograniczyć swój adres IP tylko za pomocą:

Allow from x.x.x.x

Zobacz: http://httpd.apache.org/docs/current/mod/mod_access_compat.html

Paul Rad
źródło
Zadziałało, kiedy wstawiłem „Wymagaj wszystkiego, co zostało przyznane” zamiast „Pozwól wszystkim” i „Spełnij wszystko”. Te dwie nie działały dla mnie. Jestem na Apache 2.4.
endo64
1

Musisz dodać kolejny plik .htaccess do podkatalogu, który zastępuje uwierzytelnianie. .htaccess przechodzi kaskadowo w górę, tj. będzie szukał w bieżącym folderze, a następnie przejdzie do wyższego poziomu i tak dalej.

Fenton
źródło
4
czy znasz składnię? Rozumiem koncepcję, ale nie wiem, jak ją wdrożyć.
justinl
Jeśli chcesz usunąć bieżący i nie używać żadnych uprawnień, po prostu zastąp go pustym plikiem o nazwie .htaccess
Gaʀʀʏ
3
@Garry to nie jest sposób kaskadowania .htaccess, musisz jawnie nadpisać opcje.
William Denniss
1

Oto sposób na zezwolenie na podkatalog „foo” poprzez podstawowe uwierzytelnianie z głównego pliku .htaccess w witrynie:

AuthType Basic
AuthName "Password Required"
AuthUserFile /dir/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/foo/#
Require valid-user

Uwaga: działa to w Apache 2.4. Nie potwierdziłem dla wcześniejszych wersji.

PeterA
źródło
0

Jeśli chcesz zapobiec uwierzytelnianiu htaccess przez określone directoty, możesz użyć następującego kodu w swoim pliku htaccess u góry.

AuthType Basic AuthName "Enter Pass" AuthUserFile /home/public_html/.htpasswd /*PATH TO YOUR .htpasswd FILE*/ Require valid-user SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow Order allow,deny Allow from env=allow

Ponadto, jeśli chcesz zapobiec tworzeniu wielu katalogów, dodaj

SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow

tyle razy ile katalogów chcesz usunąć z zapobiegania htaccess.

Mohd Jafar
źródło