Использование директив файла .htaccess — часть первая: полезные директивы

Приветствую Вас, гости и подписчики блога 4remind.ru. Не секрет, что в настоящее время подавляющее большинство персональных сайтов и блогов располагаются на Unix/Linux хостингах, где как правило функции web-сервера выполняет сервер Apache. Но в связи с тем, что некоторые владельцы сайтов, особенно самые начинающие, до сих пор не знают, как и для каких целей можно, а зачастую даже нужно, использовать файл .htaccess (файл дополнительной конфигурации веб-сервера Apache), решено выложить небольшой обзор полезных директив, которые часто используются на сайтах.

Я не буду рассказывать в деталях о сервере Apache и файле .htaccess, так как о них можно почитать на сайте Википедии (свободной энциклопедии), а просто приведу примеры использования самых популярных директив сервера Apache в файле .htaccess. Это на мой взгляд послужит небольшой шпаргалкой при настройке и защите сайтов и их содержимого.

Итак, далее следуют примеры с короткими комментариями.

Указание или изменение индексной страницы директории.

Директива DirectoryIndex.

DirectoryIndex index.html index.php index.htm index.cgi

После DirectoryIndex указываются индексные страницы (имена файлов), разделенные пробелом. При запросе посетителем директории, в которой находится этот файл .htaccess, индексные страницы будут искаться в том же порядке, в котором они были перечислены в директиве DirectoryIndex. К примеру, если файл index.html будет отсутствовать в текущей директории, то сервер будет пытаться обратиться к файлу index.php и так далее.

Обязать сервер выполнять коды PHP в файлах HTML

Директивы RemoveHandler и AddType

RemoveHandler .html .htm
AddType application/x-httpd-php .php .php3 .htm .html

После добавления этих строк в файл .htaccess сервер должен будет выполнять код PHP в файлах как с расширениями *.php и *.php3, так и в файлах с расширениями *.htm *.html.

Запретить отображение содержимого каталога

Options –Indexes

Посетителям не будет показываться содержимое директории, в которой находится файл .htaccess с такими опциями.

Разрешить отображение содержимого каталога

Директива Options

Options +Indexes

Посетители смогут просмотреть содержимое директории, в которой находится файл .htaccess с такими опциями.

Исключить из списка просмотра файлы только с определенными расширениями

Директива IndexIgnore

IndexIgnore *.php* *.cfg *.ini *.pl *.log

В листинге директории в таком случае не будут отображаться файлы с расширениями .php, .php3, .cfg, .ini, .pl, .log

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

Директива Deny

Deny from all

В этом примере доступ запрещен ко всем файлам и каталогам в текущем каталоге.

Разрешить доступ только с определенных IP-адресов

Директивы Order, Deny, Allow

Order Deny, Allow
Deny from all
Allow from 192.168.222.111, 192.168.222.222

Обратите внимание, что строка Order Deny,Allow определяет четкий порядок выполнения директив. Первой будет выполняться директива запрета доступа Deny, а уже после нее доступ разрешается только для IP-адресов 192.168.222.111 и 192.168.222.222.
Если Вы замените первую строку на Order Allow,Deny, то доступа для указанных выше IP-адресов уже не будет. Это произойдет потому, что директива Deny, полностью перекроет действия директивы Allow, т.к. Deny окажется назначена как последняя выполняемая директива.

Простой способ запретить доступ в директорию с определенного IP-адреса

Deny from 195.135.232.70

Запрет доступа к определенному файлу или файлам с конкретными расширениями


  Order Deny,Allow
  Deny from all
  Allow from 192.168.222.111


  Deny from all

В первом варианте посетителям будет запрещен доступ к файлу settings.php всем, кроме IP 192.168.222.111. Во втором варианте будет запрещен доступ для всех ко всем файлам с расширением .cfg.

Для имен файлов можно использовать символы подстановки:

? — любой одиночный символ;
* — любая последовательность символов, исключая символ слеша «/»

Стоит обратить внимание, что указанные в файле .htaccess запреты будут касаться только внешних запросов к файлам.
В то же время скрипты, которые находятся на сервере сайта, по прежнему будут иметь доступ к этим файлам.
Указанные выше запреты доступа рекомендуется добавлять для файлов, в которых например прописаны настройки сайта или скриптов, конфиденциальные данные и тому подобное, что должно быть надежно скрыто от посторонних.

Запрет доступа к файлам с несколькими расширениями, применяя регулярные выражения


  deny from all

Указанная в примере директива хоть сама и не работает с регулярными выражениями, но это можно исправить, поставив тильду (~) в ее опциях, а после тильды, добавив пробел, уже можно вставлять регулярное выражение, заключенное в кавычки.
В результате будет запрещен доступ ко всем файлам с расширениями *.ini, *.cfg и *.psw

Ошибки сервера Apache при доступе к страницам сайта

ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html

При возникновении ошибок, прописанных в файле .htaccess, посетитель сайта будет перенаправлен на соответствующие страницы, которые Вы можете создать по своему усмотрению.

Перечень наиболее значимых кодов ошибок, для которых стоит создать страницу с информацией для посетителей:

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

Указать кодировку, в которой сервер отдает файлы браузеру

AddDefaultCharset utf-8

Определение кодировки файлов, которые загружаются на сервер

CharsetSourceEnc utf-8

Запретить перекодировку файлов сервером (при загрузке на сервер)

CharsetDisable on

Указание опций PHP в файле .htaccess

В файле .htaccess можно также использовать директивы конфигурирования PHP (в основном они находятся в файле php.ini). Таким образом для конкретной директории можно назначить определенную конфигурацию PHP.

Для директив PHP в конфигурационных файлах .htaccess вэб-сервера Apache используются следующие директивы:
php_value
php_flag

Директива php_flag служит для установки логических значений директив, как в файле php.ini. Директива php_value служит для установки строковых и числовых значений.

Синтаксис для директив php_value и php_flag следующий:

php_flag имя_директивы on | off
php_value имя_директивы VALUE

Примеры использования директив PHP в .htaccess

Вывод всех сообщений об ошибках, генерируемых скриптами PHP

php_flag  display_errors 1
php_flag  display_startup_errors 1
php_value  error_reporting “E_ALL & ~E_NOTICE”

Запрет выполнения скриптов PHP в текущей и во всех вложенных директориях

php_flag engine off

Назначить строку User-Agent, которая будет использоваться скриптом PHP при обращении к удаленному серверу


php_value user_agent "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/12.0"

С полным списком директив PHP и областей их применения можно ознакомиться на сайте PHP.net
Там в таблице обращайте внимание на режимы, которые указывают где могут быть установлены параметры конфигурации.

Для тематики данной статьи нас будет интересовать два режима, то есть те параметры конфигурации, которые могут использоваться в файлах .htaccess, а именно это PHP_INI_PERDIR и PHP_INI_ALL

В следующей статье мы продолжим знакомство с использованием .htaccess для перенаправления (редиректа) входящих запросов и парольной защиты каталогов и файлов.

До встречи.

Метки: apache, htaccess, PHP, директива, сервер

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

Один комментарий к “Использование директив файла .htaccess — часть первая: полезные директивы”

  1. artis72:

    Спасибо за работу.

Оставить комментарий к artis72

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

Новости блога 4remind.ru в Твиттере Персональная страница блога 4remind.ru в Facebook Персональная страница блога 4remind.ru в Google+ Новостная лента блога 4remind.ru в FriendFeed

4remind.ru - персональный блог вебмастера