.htpasswd и .htaccess - внутренняя ошибка сервера

Я хочу защитить свой веб-сайт паролем, но как только я добавляю файлы .htpasswd и .htaccess, я получаю сообщение об ошибке сервера:

Internal Server Error

Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог выполнить ваш запрос.

Обратитесь к администратору сервера и сообщите ему о времени возникновения ошибки и обо всем, что вы могли сделать, что могло привести к ее возникновению.

Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера.

Вот код, который я использую:

.htaccess

AuthType Basic  
AuthName "Top Secret for SongKick eyes only."  
AuthUserFile /webroot/.htpasswd  
require valid-user

.htpasswd

songkick:isS1rCTQE/p8E

Я также попытался AuthUserFile /.htpasswd (то есть без "webroot", который является названием папки, которая, по-видимому, находится в диспетчере файлов), но это также не работает.

Кстати, я пользуюсь хостингом GoDaddy, если это имеет значение.

Ответ 1

Согласно AuthUserFile, вы должны указать полный путь к файлу паролей, а не относительный путь от DocumentRoot, если он абсолютный (то есть начинается с косой черты).

Директива AuthUserFile устанавливает имя текстового файла, содержащего список пользователей и пароли для аутентификации пользователей. Путь к файлу - это путь к файлу пользователя. Если он не является абсолютным, он рассматривается как относящийся к ServerRoot.

Обратите внимание, что ServerRoot не является DocumentRoot.

Если DocumentRoot - /var/www, а файл паролей - /var/www/webroot/.htpasswd, вы должны сказать

AuthUserFile /var/www/webroot/.htpasswd

в вашем файле .htaccess.


Вы можете узнать об абсолютном пути с помощью небольшого PHP-скрипта, например,

<?php
echo "Absolute path: ", getcwd();

Поместите это в каталог, где вы хотите найти файл .htpasswd, и назовите его с помощью http://www.example.com/path/to/test.php

Не забудьте удалить скрипт, когда закончите.


Сказал, что вы не должны размещать свой файл паролей в любом месте, доступном в DocumentRoot. Лучше поместите его в какое-то место, недоступное из Интернета, например, /etc/apache2/htpasswd или там, где вам удобно.

Ответ 2

Приходят на ум две вещи.

  • Является ли .htpasswd доступным для чтения пользователем веб-сервера?

  • Знаете ли вы, что Apache установлен с помощью AllowOverride all, чтобы позволить .htaccess работать по назначению?

Ответ 3

Основной причиной этой ошибки является путь "AuthUserFile". У меня была такая же проблема, и я решил ее, зайдя в cpanel. Защищая вашу папку в cPanel, она автоматически обнаруживает файл htpasswd.

Перейдите в cPanel- > Password Protect Directories- > Определите каталог, а затем создайте пользователя. Надеюсь, это поможет вам.

Ответ 4

Все стандартные ответы (полный путь, правильный формат и т.д.) не работали для меня. После большого отслеживания я обнаружил, что разрешений в родительской папке было недостаточно, поэтому, хотя путь в .htaccess был прав и разрешения на файл были rw-rr, все равно не нужно, потому что родителем был rwx-rw- -. Это может быть сложно отследить на узле, который ограничивает доступ к папкам с восходящим потоком.