Не нашел полноценного гайда на форуме по написанию .htaccess и .htpasswd, при большом желании можно найти всю необходимую информацию в рунете, сдесь же приведу основные моменты.
.htaccess - это системный файл Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках).
С помощью него можно переопределить многие директивы из файла
httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей).
В случаях, когда у вас нет доступа в файлу настройки Апача, т.е. если Апач стоит не на вашей машине, а на виртуальном хостинге, именно .htaccess необходим для установки необходимых параметров (в данном примере приведу основные способы необходимой на мой взгляд защиты ваших ресурсов
).
Сам по себе .htaccess не доступен из браузера.
Точка перед htaccess обязательна!
Если вы не видите в директории .htaccess, это не значит, что его там нет. Необходимо в вашем FTP клиенте установить в настройках отображение скрытых файлов.
Если .htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл .htaccess (и кроме всех папок "ниже" этой папки со вторым .htaccess).
На примере это будет выглядеть так:
Допустим в корне вашего форума стоит .htaccess с редиректорм на главную страницу в случаях 404 ошибки, а в корне admincp помимо редиректа прописана необходимая авторизация для открытия страниц\файлов именно папки admincp, в свою очередь являясь дополнительной защитой для админ-панели. В пределах действия всех поддиректорий сайта будет действовать правила, указанные в .htaccess - расположенного в основной директории сайта. А в пределах директории admincp будет действовать .htaccess расположенный именно в директории admincp.
Примерная иерархия:
Директория сайта - .htaccess
------------------папка includes
----------------------------------папка в директории includes
------------------папка imagies
------------------папка vb
------------------папка admincp - .htaccess
-----------------------------------папка в директории admincp
------------------папка modcp
------------------и т.д.
Оранжевым отмечены папки, на которых влияет .htaccess расположенный в директории сайта
Сиреневым - папка admincp, на которую влияет собственный .htaccess, так же влияющий и на все подпапки в ней.
Прежде чем перейти к парктике расскажу о нюансах при прописывании настроек в .htaccess.
Самая основная проблема обычных юзеров заключается в том, что при создании данного файла конфигурауии многие не учитывают ОС, на которой стоит Апач, в результате чего даже правильно прописав все настройки в итоге выходит 500 ошибка
Это происходит из-за того, что файл записан в формате Windows, а сервер стоит на UNIX`е или наоборот.
Для смены кодировки можно использовать любой редактор, умеющий преобразовывать кодировки в UNIX-формат (т.к. большинство хостов сейчас на нем).
Подойдет для этого, например, простенькая программа
Notepad++.
Для справки:
Основные ошибки при написании .htaccess:
- Ошибка 500 - Скрипт невозможно запустить (либо не верный путь в скрипте, либо формат, либо ошибка в написании скрипта).
- Ошибка 404 - Файл не найден (либо не залили запрашиваемый файл на сервер, либо не правельно прописаны права для нужного файла или для самого скрипта).
- Ошибка 403 - Отказ в доступе.
- Ошибка 401 - Необходима авторизация.
А так же о формате .htaccess:
Это системный файл, соответственно никаких txt и т.п. после названия быть не должно, ваш фтп должен определить файл как
Файл "HTACCESS".
Теперь можно перейти к практической части, что и где нужно прописывать и что это даст:
Сразу оговорюсь, что все вариации расписывать не вижу смысла, как говорил выше - на просторах рунета информации достаточно, расскажу лишь о том, что необходимо на мой взгляд:
Правила написания скрипта:
- Строки комментарии начинаются с символа # (если вам необходимо писать о том, что "это" делает
)
- Пути к файлам (директориям) указываются от корня сервера.
- Корень сервера обычно либо home, либо var.
Для упрощения поиска правельного пути, если вы его не знаете (кстати, где то в темах форума это видел, да простит меня автор, не нашел снова эту тему) нужно создать php файл в котором необходимо написать:
PHP Code:
<?php
phpinfo(INFO_ALL);
?>
Сохранить его, и залить в необходимую вам дирректорию.
Открываем, внизу ищем графу PHP Variables, в ней ищем, опять же например
, строку _
SERVER["SCRIPT_FILENAME"], справа от нее будет полный путь вплоть до залитого вами php файла.
Не забудьте удалить данный файл после получения от него необходимой вам информации!
Теперь о скриптах:
Путь к файлу:
PHP Code:
DirectoryIndex /var/user4444444/www/data/www/вашсайт/вашфайл.php
Путь к директории (без слеша в конце):
PHP Code:
DirectoryIndex /var/user4444444/www
Если рассматривать директорию вашего сайта с переходом не на index.html, а на index.php (есть сервера, в которых необходимо прописывать php файлы в .htaccess, т.к. по умолчанию на Апаче могет стоять только thml... при таком раскладе php файлы у вас не будут автоматически запускаться, а будет кидать в директорию индекса) Для этого, а так же для защиты от индексации директоирй и поддиректорий:
PHP Code:
DirectoryIndex index.php
Редирект с вашего старого сайта на новый:
PHP Code:
Redirect /старыйсайт/ http://новыйсайт/
Редирект с собственной страницы ошибок (так же можно указать редирект при ошибке доступа(ошибка 403) на указанный вами раздел, например на страницу вашего сайта):
PHP Code:
ErrorDocument 404 http://вашсайт.ru
Включение кеширования картинок (так же туда можно добавить стили форума/сайта и скрипты):
PHP Code:
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch ".(jpg|gif|png|jpeg)$">
ExpiresActive on
ExpiresDefault "access plus 1 mounth"
</filesmatch>
</ifmodule>
В пятой строке необходимо указать нужный вам срок кеширования (у меня стоит 1 месяц).
Вместо открытия происходит загрузка файлов:
PHP Code:
AddType application/octet-stream .rar .doc .mov .avi .pdf .xls .mp4
Теперь относительно самой защиты:
Запрет на доступ всем:
PHP Code:
Order Deny,Allow
Deny from all
Запрещение доступа к указанному файлу:
PHP Code:
<Files файл.php>
Deny from all
</Files>
Запрет доступа определенным юзерам по IP:
PHP Code:
Order Deny,Allow
Deny from 196.56.222.42
Разрешение на доступ для указанного IP:
PHP Code:
Order Deny,Allow
Deny from all
Allow from 192.168.1.1
Запрет отображения индексового каталога при отсутствии index.php или index.html:
PHP Code:
Options -Indexes
Запрет доступа к файлам указанных ресширений:
PHP Code:
<Files ~ "\.(inc|conf|cfg)$">
Deny from all
</Files>
Теперь о защите указанных вами папок паролем (на форуме было, но т.к. тут гайд, напишу еще раз - пусть все будет в одном месте ) :
Существует конфигурационный файл, позволяющий устанавливать доступ к определенным разделам сайта или форума (пароль htaccess) :
.htpasswd
Создается .htpasswd точно так же, как и .htaccess, с нужным форматом, указанием верных путей и т.п.
Данный пример я буду рассматривать на защите доступа к admincp панели, допустим
www.вашсайт.ru/admincp/index.php - путь админке (рекомендую поменять стандартный путь, на форуме информации достаточно).
Вам необходимо ограничить доступ к админке, для этого необходимо в .htaccess прописать следующее:
PHP Code:
DirectoryIndex index.php
Options -Indexes
ErrorDocument 404 http://вашсайт.ru
ErrorDocument 403 http://вашсайт.ru
AuthName "Control panel (или любое другое название всплывающее при запросе авторизации)"
AuthType Basic
AuthUserFile /var/user4444444/www/data/www/auth/pas/.htpasswd
require valid-user
Где:
AuthUserFile - путь до файла ключей (ниже распишу о его создании) с учетом папки /auth/ и /pas/, т.е. в дальнейшем вы создадите эти папки в нужной директории(пример ниже) и закините туда ваш .htpasswd).
Безопаснее будет поместить .htpasswd на директорию выше, чем директория вашего сайта:
Пример:
Путь к директории вашего сайта:
PHP Code:
//var/user4444444/www/data/www/вашсайт.ru/собственно сам сайт
Файл помещаем на директорию выше, т.е. путь будет:
PHP Code:
/var/user4444444/www/data/www/auth/pass/.htpasswd
Теперь создаем
.htpasswd:
Для создания нажимаем на
.htpasswd, вбиваем там желаемый логин и пароль, нажимаем ок и видим получившиеся строки. В зависимости от типа ОС нужно выбрать нужную вам строку и перекопировать ее в созданный вами .htpasswd
.thpasswd заливаем в указанное в .htaccess место.
Все
если все пути указаны верно, все будет работать
теперь при попытке зайти на admincp сначала будет необходимо авторизироваться, и только потом вводить пароль и логин к админке, даже если вы уже авторизированы на сайте\форуме.
Пример с комментариями:
PHP Code:
# Индексный файл - php, защита от индексации директорий и поддиректорий
DirectoryIndex index.php
# Если нет индекс.php - индексовая директория не показывается
Options -Indexes
#Ошибки 404 и 403 переносят вас обратно на гл. страницу форума.
ErrorDocument 404 http://вашсайт.ru
ErrorDocument 403 http://вашсайт.ru
# Авторизация, ее название
AuthName "Control panel"
AuthType Basic
# Путь к ключу
AuthUserFile /var/user4444444/www/data/www/auth/pas/.htpasswd
require valid-user
В данной статье были описаны самые основные моменты в написании конфигурационных файлов .htaccess, .htpasswd, а так же защита директорий с помощью .htpasswd
P.S. Не забудьте прописать необходимые права на чтение, редактирование и исполнение файлов.
Надеюсь, кому-нибудь пригодится.
Спасибо за внимание