Очень часто, во время разработки сайта либо веб сервиса появляется необходимость запретить доступ к конкретной странице либо конкретному разделу сайта (директории). Один из вариантов это сделать — использовать htpasswd.
В данном примере мы рассмотрим блокировку доступа к директории test которая находится в корне сайта.
Видео инструкция
Создание htpasswd
Первое, что нам нужно будет сделать — создать файл в котором в зашифрованном виде будут находится имена пользователей и пароли. Именно с этими данными будет производится проверка при вводе имени пользователей и пароля при получении доступа к закрытому сайту либо директории.
Для создания файла htpasswd подключается к серверу, на котором мы будем ограничивать доступ, подключаемся по SSH и выполняем следующую команду:
htpasswd -c -B /var/www/passwd/.htpasswd username
Разберем подробнее каждый ключ
-с — отвечает за создание нового файла
-B — в качестве шифрования использует алгоритм bcrypt
/var/www/passwd/.htpasswd
— путь и имя создаваемого файла
username — имя пользователя
После выполнения данной команды вам необходимо будет ввести пароль который будет использоваться для данного пользователя.
Если же вы захотите добавить новых пользователей для доступа к закрытой части сайта, то вам необходимо будет выполнить следующую команду:
htpasswd -B /home/unixhost/web/.htpasswd username2
Для удаления определенного пользователя из файла используется ключ -D , указывается путь к файлу htpasswd и имя пользователя.
htpasswd -D /var/www/passwd/.htpasswd username2
После внесения пользователей установим права на доступ к данному файла, укажем, что доступ к данному файлу будут иметь все пользователи системы.
chmod 644 /var/www/passwd/.htpasswd
Установка AllowOverride в конфигурации веб сервера
Для того чтобы наша «блокировка» работала нам необходимо изменить значение у переменной AllowOverride с None на All. Для этого открываем файл конфигурации вашего вебсервера , обычно данный файл находится по адресу /etc/apache2/apache2.conf
либо /etc/apache2/conf.d/
либо /etc/apache2/sites-enabled/
в файле который отвечает за подключение вашего доменного имени ищем значение AllowOverride и меняем его на All.
Мой файл выглядит следующим образом, ваш может отличаться.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
После внесения изменений перегружаем вебсервер
sudo service apache2 restart
Закрываем сайт/директорию в .htaccess
После создания файла htpasswd нам необходимо будет создать либо отредактировать уже имеющийся файл .htaccess .
Корневая директория сайта у меня находится по адресу /var/www/html , в данной директории находится папка test и в ней php файл который выводит информацию о версии php.
Для того чтобы ограничить доступ к в папке test создадим в ней файл .htaccess в который добавим следующие строки :
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /var/www/passwd/.htpasswd
Require valid-user
В переменную AuthUserFile указываем путь к нашему файлу который мы создавали.
Теперь если мы перейдем по адресу сайта sitename.com/test то нас попросит ввести логин и пароль.
После ввода логина и пароль мы увидим нашу страницу.
В случаи если вам нужно ограничить доступ лишь к одной странице (файлу) для этого нужно указать имя файла для доступу к которому будет запрашиваться имя пользователя и пароль
<Files admin.php>
AuthName "Authentication Required"
AuthType Basic
AuthUserFile /var/www/passwd/.htpasswd
Require valid-user
</Files>
Вот таким простым способом вы можете ограничивать доступ к определенным частям вашего сайта.