Strona na hasło za pomocą .htpasswd i .htaccess

Chciałbym, aby wejście do określonej lokalizacji na stronie było możliwe jedynie, gdy zostanie podane hasło. Na nowym serwerze postawiłem Apache, włączyłem mod_rewrite , a mod_auth_basic był włączony automatycznie. Utworzyłem plik .htpasswd z określonym użytkownikiem i hasłem oraz .htaccess z potrzebnymi informacjami w danym folderze zgodnie z wzorem z Wiki.

W pliku _ /etc/apache2/sites-enabled/000-default _ w _ <Directory /var/www/> _ zmieniłem jedynie AllowOverride na All.

W tym momencie pokazuje się okienko do logowania, jednak przy podaniu jakichkolwiek danych wywala zaraz stronę Internal Server Error

Internal Server Error oznacza w tym wypadku błąd w pliku .htaccess (bądź innym z konfiguracją Apacha). Sprawdź czy ścieżka do .htpasswd jest poprawna, rób zmiany stopniowo i obserwój przy którym fragmencie natrafisz na problem - łatwiej wtedy go wyeliminować.

No to tak dla przykładu moje pliki:

.htaccess

.htpasswd powinno też być poprawne.

Plik .htpasswd nie może być w tym samym katalogu to .htaccess, w którym ustawiasz autoryzację HTTP.

Jeśli w pliku .htaccess masz /public_html/domena/  to .htpasswd musi być w /public_html/ , a dyrektywa musi wyglądać  AuthUserFile /public_html/.htpasswd (na moich serwerach wymagana jest pełna ścieżka)

Dlaczego nie może być w tym samym?

Jak najbardziej może być, niczemu to nie przeszkadza, po prostu w dyrektywie podajemy adres bezwzględny, a nie względny.

Inna sprawa, że warto byłoby wyłączyć dostęp do plików .ht*.

Nie może być w tym samym, bo powstaje ślepa pętla - strzeżesz w końcu plików w katalogu, w którym jest plik z hasłami, a do którego nie ma dostępu bez autoryzacji.

Nie wiem czemu jest wymagana ścieżka absolutna - może tak jest w dokumentacji.

Dostęp do pliku .ht jest domyślnie wyłączany w konfiguracji apache, tzn po HTTP nie wyświetlisz ich zawartości.