Оглавление статьи
В этот статье поговорим о том, как сделать доступ к сайту или отдельной директории по паролю.
В чем суть: мы создадим 2 файла: в первом код для блокировки сайта с ссылкой на 2 файл, в котором лежат логины и пароли для доступа. В первом файле мы должны указать абсолютный путь до второго:
.htaccess — файл дополнительной конфигурации веб-сервера Apache.
.htpasswd — файл для указания логинов и паролей для доступа.
Расположение этих файлов будет зависеть от того, к какой директории вы хотите закрыть доступ.
Закрыть доступ ко всему сайту
Файл .htaccess должен находится в корневой папке сайта, .htpasswd
лучше положить в какую-то из директорий, чтобы до него нельзя было так просто добраться — там будут лежать логины и пароли для доступа. Предлагаю положить его в директорию /folder.
Получается такая структура:

В файл. htaccess вставляем код:
AuthType Basic
AuthName "Protected Area"
AuthUserFile /.htpasswd
Require valid-user
AuthName — текст содержащийся в данной директиве, выводится в окне ввода пароля. Он должен быть написан в одну строку и заключен в двойные кавычки. Попробовал, у меня эта надпись нигде не показывается.
AuthType — типы аутентификации: Basic или Digest. Рекомендуется использовать первый, т.к. второй поддерживается не всеми браузерами.
AuthUserFile — полный путь к файлу с логинами и паролями, для аутентификации пользователей. Пароли содержаться в шифрованном виде. Рекомендуется хранить данный файл в папке, к которой нет доступа для пользователей, это необходимо, чтобы предотвратить кражу паролей.
require valid-user — директива предписывает, что к URL получают доступ только, пользователи, успешно прошедшие аутентификацию.
В строке AuthUserFile вставляете путь, который получился у вас в файле test. php
Для того чтобы узнать абсолютный путь к файлу, создаем в директории с файлом .htpasswd
файл test.php
, в нем экранируем переменную:
<?php echo dirname($_SERVER['SCRIPT_FILENAME']);
Теперь нам нужно открыть этот файл в браузере.
http://ваш-сайт.ru/folder/test.php
, подставите адрес своего сайта.
У меня на выходе получилась такая строка /home/***/works/sneakers-html/folder
Вставляем ее в код и получаем:
AuthType Basic
AuthName "Protected Area"
AuthUserFile /home/***/works/sneakers-html/folder/.htpasswd
Require valid-user
После того как вы узнали абсолютный путь до директории, удалите этот файл, он больше не нужен.
Теперь нам нужно создать зашифрованный пароль. Для этого перейдем по ссылке на генератор паролей. Если он не работает, загуглите «htpasswd password generator», они одинаковые по принципу работы.
Заполняем необходимые данные в форме и нажимаем кнопку «сгенерировать данные»:

Скопируем получившуюся строку и вставим в файл. htpasswd:

Строка означает — логин: пароль в зашифрованном виде. Для доступа на сайт нам нужно вводить тот логин и пароль, который мы указывали в генераторе, то есть admin и password.
Что мы имеем в итоге:
- файл .htaccess лежащий в корне сайта с 4 строками кода и путем к файлу с логинами и паролями
- файл .htpasswd с логином и паролем
Теперь мы можем заходить на сайт и должны увидеть такое окно:

После ввода данных на откроется главная страница сайта. Если же будет ошибка в вводимых данных, либо мы получим 404 ошибку, либо страница перезагрузится и снова появится форма ввода данных.
Закрыть доступ к директории
Разница между этими способами в том, что файл. htaccess нужно поместить в ту директорию, которую вам необходимо закрыть:

Файл .htaccess вы можете разместить в любом месте, вы уже научились узнавать его абсолютный путь. В данном случае можно просто скопировать путь из файла. htaccess корневой папки.
Будьте внимательны
Любое несоответствие кода в .htaccess или неправильный путь до файла приведут к ошибке «500 Internal Server Error». Если это произошло — сверяйте код в файле .htaccess
У меня выкидывало ошибку из-за отсутствия «/» в начале пути.
Видеоурок
Спасибо за прочтение статьи! Если у вас возникнут какие-то вопросы, трудности, пишите мне на почту, в личку в вк, в комментариях, по возможности помогу!
Итоговый код файлов
.htaccess
AuthType Basic
AuthName "Protected Area"
AuthUserFile /home/***/works/sneakers-html/folder/.htpasswd
Require valid-user
.htpasswd, логин и пароль. Генерировать тут. В коде пример рандомного логина и пароля
postnov:XVLbicy4CMxUE
Вопросы и ответы
Как создать несколько логинов и паролей для разных пользователей?
Да, вы можете создать неограниченное количество логинов и паролей. Это полезно, если нужно предоставить доступ разным людям к одному защищённому разделу.
Инструкция:
1. Используйте утилиту htpasswd
без флага -c
, чтобы добавлять новых пользователей в существующий файл .htpasswd
.
2. Для каждого нового пользователя выполните команду:
htpasswd /путь/к/.htpasswd новый_логин
3. После этого введите пароль для пользователя.
Пример:
# Создаём первого пользователя (флаг -c для нового файла):
htpasswd -c /var/www/secure/.htpasswd user1
# Добавляем второго пользователя:
htpasswd /var/www/secure/.htpasswd user2
⚠️ Важно!
Не используйте одинаковые пароли для разных пользователей.
Убедитесь, что файл .htpasswd
недоступен из браузера (например, лежит вне корневой папки сайта).
Как сделать, чтобы пароль запрашивался каждый раз?
По умолчанию браузер может кешировать пароль. Чтобы отключить это, добавьте в .htaccess
настройки, которые запрещают кеширование.
Решение:
- Добавьте директиву
AuthType Basic
и укажитеAuthBasicProvider file
. - Установите заголовок
Cache-Control
, чтобы браузер не сохранял данные авторизации.
Код для .htaccess
:
AuthType Basic
AuthBasicProvider file
AuthName "Private Area"
AuthUserFile /путь/к/.htpasswd
Require valid-user
# Запрет кеширования пароля
<IfModule mod_headers.c>
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires 0
</IfModule>
Как проверить:
- Откройте сайт в приватном режиме браузера.
- После ввода пароля закройте и снова откройте страницу — браузер запросит пароль заново.
⚠️ Важно!
Если используется HTTPS, убедитесь, что сертификат действителен, иначе браузер может игнорировать настройки.
Распространённые ошибки и их решение
Ошибка 500
Некорректный путь к файлу .htpasswd
Симптомы: ошибка 500 (Internal Server Error) или пароль не принимается.
Причина: директива AuthUserFile
в .htaccess
содержит относительный путь вместо абсолютного.
Пример ошибки:
# Неправильно (вызовет ошибку):
AuthUserFile /folder/.htpasswd
Решение: используйте полный абсолютный путь к файлу. Как его узнать:
- На хостинге: путь обычно выглядит как
/home/username/www/site/.htpasswd
. - На локальном сервере (например, OpenServer):
C:/OpenServer/domains/site/.htpasswd
.
Правильный пример:
AuthUserFile /home/user123/public_html/.htpasswd
Пароль не принимается
Убедитесь, что в .htpasswd
нет лишних символов (пробелов, переносов строк).
11 комментария
У меня ошибка! Internal Server Error
Проверю
Сегодня защищал одну директорию и тоже выскочила ошибка. Внимательно проверьте путь к файлу htpasswd. Любое несоответствие выкинет ошибку.
У меня ошибка возникла из-за отсутствия «/» в начале пути.
Было «home/…», а надо было «/home/…»
Какой путь только не писал ничего не помогает. В первый раз появляется форма а после ввода данный ошибка 500.
ок
Добрый день! К сожалению сайт с генерацией паролей не работает. И что теперь делать?
как сделать что бы каждый раз спрашивало пароль?
Привет!
Попорбуй вставить эти параметры в файл.
BrowserMatch «.*» nokeepalive
BrowserMatch «.*MSIE.*» !nokeepalive
Выглядеть будет примерно так
AuthType Basic
AuthName «Protected Area»
AuthUserFile /home/***/w
BrowserMatch «.*» nokeepalive
BrowserMatch «.*MSIE.*» !nokeepalive
Спасибо!
Добрый день! Есть ли возможность создавать несколько рабочих логинов и паролей, чтобы открывать и закрывать доступ к контенту разным пользователям?
При открытии файла test.php выходит окно с авторизацией, а не как у тебя. Полный путь скопировал в менеджере файлов на хостинге, но выходит ошибка 500.