.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- -. Это может быть сложно отследить на узле, который ограничивает доступ к папкам с восходящим потоком.