Приветствую Вас, гости и подписчики блога 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, директива, сервер
Спасибо за работу.