Файл .htaccess - настройка и примеры использования.

12.02.2017

Файл .htaccess – это конфигурационный файл сервера Apache, позволяющий скорректировать настройки сервера для директории в которой он расположен. Его действие распространяется так же и на все дочерние директории. После его редактирования, в отличие от основных конфигурационных файлов, не нужно перезапускать сервер, поскольку он считывается и обрабатывается при каждом HTTP запросе.

Полную документацию (на английском) можно найти на официальном сайте.

Судя по названию файла, изначально он задумывался как средство для управления доступом к различным директориям сайта, но впоследствии его функционал значительно расширился. Вот пример как можно разрешать/запрещать доступ.

Полный запрет доступа всем

denу from all

Полный запрет доступа всем, за исключением с определенных IP адресов

order deny,allow denу from all allow from xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy

Запрет доступа к определённому файлу.

<Files secret.txt> order allow,deny deny from all </Files>

Запрет доступа к группе файлов.

<FilesMatch ".(htaccess|htpasswd|ini|log)$"> order allow,deny deny from all </Files>

Строка ".(htaccess|htpasswd|ini|log)$" означает шаблон регулярного выражения для обработки имени файла. Этот шаблон выбирает все файла, имена которых заканчиваются на ".htaccess", ".htpasswd", ".ini", ".log". Для них будет доступ запрещён.

Запрет просмотра (не доступа) директории.

Options All -Indexes

Если разрешить просмотр директории, то можно будет просмотреть содержимое каталога прямо через браузер.

Options All +Indexes

При запрете просмотра директории нужно назначить стартовую страницу, которую будет показывать сервер вместо списка содержимого директории. Обычно такой файл называется index.html, но можно использовать любой файл.

DirectoryIndex index.html

Можно запретить загрузку страниц вашего сайта во фрейм другого сайта. Если на странице другого сайта есть подобный код <iframe src="http://ваш сайт/"></iframe>, то страница вашего сайта будет отображаться на чужом сайте. Чтобы запретить это, нужно написать следующую директиву:

Header always set X-Frame-Options SAMEORIGIN

Директива добавляет заголовок, запрещающий браузеру загружать страницу во фрейм с чужого домена, и разрешающего загружать во фрейм собственного домена. Для полного запрета (и даже собственного домена) вместо SAMEORIGIN используется DENY.

Для выполнения определенных директив требуется чтобы сервером был загружен соответствующий модуль. Если модуль не загружен, то директиве естественно не будет выполнена, и этот факт будет зафиксирован в логе ошибок сервера. На своем сервере вы имеете полную свободу действий, но если правите .htaccees на чужом сервере (например сервере хостера), то чтобы не захламлять лог ошибок лучше использовать if-блоки. В частности, для выполнения вышеуказанной директивы серверу требуется модуль "mod_headers.c". If-блок будет выглядеть так:

<IfModule mod_headers.c> Header always set X-Frame-Options SAMEORIGIN </IfModule>

Можно сделать собственные страницы, выводящих описание ошибок, произошедших на сайте. Нужно лишь самому сверстать несколько файлов с разрешением *.html, с необходимым содержимым и внести запись в .htaccess файл. Например:

# 401 — Требуется авторизация (Authorization Required) ErrorDocument 401 /errors/401.html # 403 — пользователь не прошел аутентификацию, запрет на доступ (Forbided) ErrorDocument 403 /errors/403.html # 404 — запрашиваемый документ (файл, директория) не найден (Not Found) ErrorDocument 404 /errors/404.html # 500 — внутренняя ошибка сервера (Internal Server Error) ErrorDocument 500 /errors/500.html

Также можно настроить перенаправление с одного файла на другой. Для этого потребуется модуль mod_rewrite, но об это подробней в следующей статье.