Настройка файла .htaccess. Установка пароля на директорию.
Файл .htaccess представляет собой гибкое решение для частной настройки apache (httpd). Посуществу .htaccess позволяет настроить любые опции для директории в которой он располагается. В нем можно употреблять все что вы можете поместить в httpd.conf в секции <Directory>, но только если это разрешено директивой AllowOverride для данной директории в главном конфиге apache (httpd.conf).
Правила обработки .htaccess
- Содержимое .htaccess применяется к текущий и всем вложенным директориям
- Все файлы .htaccess идущие выше по дереву объединяются, включая основную конфигурацию (httpd.conf)
- Объединение идет сверху вниз (от корневой директории)
- Настройки в файлах .htaccess расположенных глубже по дереву имеют высший приоритет
Опции для AllowOverride
- AuthConfig
Позволяет использовать настройки авторизации в файле .htaccess. (пароли) - FileInfo
Позволяет использовать настройки типов и обработки документов (DefaultType, ErrorDocument, LanguagePriority, SetHandler, mod_mime, Header, …) и настраивать mod_rewrite для директории (RewriteEngine, RewriteCond, RewriteRule, …). - Indexes
Позволяет настраивать отображение диркетории (AddIcon, DefaultIcon, DirectoryIndex, …). - Limit
Позволяет настраивать ограничение доступа к директории на основе хоста (Allow, Deny, Order). - Options=
Перечисленные через запятую опции можно менять в .htaccess для директории (All, ExecCGI(mod_cgi), FollowSymLinks, Includes(SSI), IncludesNOEXEC, Indexes(mod_autoindex), MultiViews(mod_negotiation), SymLinksIfOwnerMatch).
Пример: AllowOverrider AuthConfig FileInfo Limit Options=ExecCGI,Indexes
Типичные применения .htaccess
- Доступ с определенного хоста:
Order allow,deny
Deny from all
Allow from 127.0.0.1 - Запрет на чтение файла:
<Files “config.php”>
Order allow,deny
Deny from all
</Files> - Настройка главной страницы:
DirectoryIndex main.html main.php default.html - Настройка собственных error страниц:
ErrorDocument 401 /auth.html
ErrorDocument 403 /forbidden.html
ErrorDocument 404 /notfound.php
ErrorDocument 500 /servererror.html - Настройка SSI и CGI:
Options +Includes +ExecCGI - Указать браузеру сохранять файлы с расширением .ext, а не выводить его кракозябрами (.exe .avi):
AddType application/octet-stream .ext - Запретить использовать прямые ссылки(hotlinkging) с чужих сайтов на файлы(архивы, картинки, музыка)
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yoursite\.dom/.*$ [NC]
RewriteRule .*\.(gif|jpg|mp3|avi|flv|zip|png)$ http://www.yoursite.dom/hotlinkingforbidden.html [R,NC,L]
Установка пароля на директорию с помощью .htaccess
Вообще то настройки приведенные ниже можно и нужно писать в основном файле (httpd.conf), а не в .htaccess, но поскольку далеко не все могут там копаться, то стало уже основной практикой использовать .htaccess для простановки авторизации на директорию или файл.
Для начала надо создать файл паролей с помощью команды htpasswd:
htpasswd -c passwdfile username
после этого введя пароль для пользователя и получив файл с паролями его нужно поместить в место где его невозможно было бы прочитать из интернета, годятся директории находящиеся выше корневых директорий сайта или положить в директорию с сайтом, но настроить конфиг таким образом что бы доступ к файлу с паролями был запрещен (по умолчанию в apache запрещен доступ ко всем файлам начинающимся на .ht, таким образом файл с именем .htpasswords будет недоступен из интернета, как и сам .htaccess)
Далее указываем в .htaccess:
- AuthType Basic
Тип идентификации, их два - Basic и Digest, причем Digest является экспериментальным, так что для использования остается только Basic - AuthName “Enter Password”
Указывает название области, имеет двойное использование, во первых название области выводится браузером при запросе пароля, во вторых если пароль уже введен для области то во время одной сессии браузер сам будет его подставлять (для этой области), тем самым избавляя пользователя от монотонного введения пароля для той же области при каждом обращении к директории с паролем (с .htaccess). Так же можно настроить пароль на другую директорию на сайте и указать ту же область, тогда браузер опять попытается использовать известныей ему пароль уже для другой директории (но с одинаковой областью) - AuthBasicProvider file
Здесь указывается провайдер идентификации, т.е. каким образом будет производится опознание пользователя, вариантов не много, но они есть (file, dbd(SQL), dbm, LDAP, …), но самый часто используемый - file (файл с паролями) - AuthUserFile /srv/www/site.dom/.htpasswords
Указываем местоположение файла с паролями (если использовать другого провайдера идентификации - то надо смотреть документацию - там другие опции) - Require valid-user
Модули авторизации, ограничивают идентифицированных пользователей (в данном примере все пользователи прописанные в файле паролей имеют доступ к директории)
Про Rewrite Engine я напишу отдельно.
.htaccess еще называют распределенным файлом конфигурации (или конфигурацией на основе директорий).