Описываются инструкции .htaccess файла, их синтаксис, приведены часто употребляемые примеры использования.
В предыдущей статье «.htaccess» было дано общее представление о файле .htaccess, его назначении и возможностях. Теперь поговорим о его инструкциях, а поскольку в .htaccess их существует множество, рассмотрим наиболее часто используемые.
При написании инструкций используется тот же синтаксис, что и в основном файле конфигурации Apache, кроме того при их составлении надо соблюдать пару достаточно простых обязательных правил:
- — файлы и директории в инструкциях .htaccess должны начинаться со слеша «/», т.е, указываться от корня сервера;
- — доменные имена в инструкциях .htaccess должны прописываться с указанием протокола.
Область действия инструкций .htaccess
Область действия инструкций .htaccess можно ограничивать с помощью специальных блоков, определяемых открывающим и закрывающим тегами, внутрь этих тегов и помещаются инструкции, действие которых ограничивается.
Блок Files распространяет действие вложенных инструкций лишь на файл, указываемый в открывающем теге.
<Files file_name> ИНСТРУКЦИИ </Files>
Блок FilesMatch распространяет действие инструкций на файлы, которые соответствуют шаблону в открывающем теге.
<FilesMatch "template$"> ИНСТРУКЦИИ </FilesMatch>
Блок IfModule использует инструкции только в случае загрузки модулей, указанных в открывающем теге. Если перед именем модуля стоит знак логического отрицания «!» (без кавычек), то ограничиваемые инструкции действуют в случае, если модуль не загружен.
<IfModule module> ИНСТРУКЦИИ </IfModule>
или
<IfModule !module> ИНСТРУКЦИИ </IfModule>
Блок IfDefine разрешает выполнение инструкций при условии, если указанные в начальном теге величины истинны.
<IfDefine value> ИНСТРУКЦИИ </IfDefine>
Блоком IfDefine можно ограничивать выполнение инструкций определенным условием, если указанная в начальном теге величина ложная, перед проверяемой величиной ставится знак логического отрицания «!» (без кавычек).
<IfDefine !value> ИНСТРУКЦИИ </IfDefine>
Описание инструкций .htaccess
Итак, приступим. Инструкции для удобства разбиты по тематическим каталогам. По клику на каталоге вы перейдете на описание инструкций соответствующей тематики, кроме синтаксиса приводятся примеры использования.
Список .htaccess инструкций
- Отображение индексных страниц
DirectoryIndex
Options
IndexIgnore - Управление кодировкой
AddDefaultCharset
CharsetSourceEnc
CharsetDisable - Управление доступом
Order
Allow
Deny - Доступ по паролю
AuthName
AuthType
Require
AuthUserFile - Простое перенаправление (редирект)
Redirect
RedirectMatch - Сложное перенаправление (mod_rewrite)
- Обработка ошибок
ErrorDocument
- PHP опции
php_flag register_globals
php_flag magic_quotes_gpc
php_flag display_errors
Отображение индексных страниц
По умолчанию, если не указан конкретный документ, как правило, открывается страница index.html, index.htm, index.php. Но если вам необходимо изменить такой порядок, используйте инструкцию
DirectoryIndex page
где page — страница или список страниц, разделенных пробелом, которые будут открываться по умолчанию.
Например,
DirectoryIndex index.php start.html
Инструкция Options управляет поведением сервера в определенном каталоге.
Options [+|-]option [ [+|-] option],
где option — может принимать следующие значения:
- FollowSymLinks — разрешает серверу следовать по символическим ссылкам в каталоге. Используется по умолчанию
- None — запрещает использовать дополнительные свойства сервера;
- All — разрешает использование дополнительных опций, за исключением MultiViews;
- ExecCGI — разрешает исполнение скриптов CGI, использующих mod_cgi;
- Includes — разрешает использовать SSI;
- IncludesNOEXEC — разрешает использовать SSI, кроме #exec cmd и #exec cgi.
- Indexes — при запросе каталога и отсутствии инструкции DirectoryIndex в этом каталоге, будет выдаваться форматированный листинг каталога;
- MultiViews — разрешение данной опции при запросе файла без расширения позволяет серверу находить файлы по маске имя_файла.* и выдавать первый же найденный по указанной маске. Включать не рекомендуется, т.к. зачастую файл отображается некорректно, т.к. пути к таблицам стилей, изображениям, и т.п. будут подставлены неверно;
- SymLinksIfOwnerMatch — разрешает открывать только ссылки, в которых файл или каталог принадлежат тому идентификатору пользователя, что и ссылка.
Обратите внимание, если параметры указаны без знака (+/-), то они не объединяются с заданными ранее параметрами, а полностью их переопределяют. Для добавления или удаления дополнительных опций из списка разрешенных надо использовать знаки + или − соответственно.
Пример использования.
# запрет выдачи листинга директории Options -Indexes # разрешение отображения листинга директории Options Indexes
Если надо запретить выдачу в листинг определенных файлов, например, PHP и javascript, то используют такую инструкцию
IndexIgnore *.php* *.js
Управление кодировкой
Перечисленные ниже инструкции указывают Web серверу тип используемой кодировки.
AddDefaultCharset code_page
где code_page — код требуемой кодировки
Для указания типа кодировки загружаемых на сервер файлов используется инструкция
CharsetSourceEnc code_page
где code_page — код требуемой кодировки
Следующая инструкция отменяет перекодировку страниц сервером
CharsetDisable On
Управление доступом
Одна из наиболее востребованных инструкций Order вместе с директивами Allow и Deny используется для управления доступом к различным ресурсам сервера. Директива Allow разрешает доступ, а Deny запрещает.
# значение по умолчанию - Deny, Allow
Order [Deny,Allow] | [Allow,Deny]
Директива Order определяет порядок следования Deny и Allow, последовательность которых очень важна. Перечисление Deny,Allow запрещает доступ все и всем, кроме разрешений, оговоренных директивой Allow. При последовательности Allow,Deny, наоборот, сначала разрешается доступ ко всему, а затем директивой Deny производится запрет доступа к ресурсам или запрет определенных пользователей.
Но наглядней всего, конечно, показать на примерах.
# доступ для всех(all) пользователей, кроме адреса 196.196.196.196 Order Allow,Deny Allow from all Deny from 196.196.196.196 # запрет доступа к php скриптам всем, кроме хоста 81.81.81.81 <Files "\.(php)$"> Order Deny,Allow Deny from all Allow from 81.81.81.81 </Files> #Запрещаем доступ к файлам настройки <Files wp-config.php .htaccess> order allow,deny deny from all </Files>
Доступ по паролю
.htaccess обеспечивает защиту директорий и файлов сервера путем доступа к ним по паролю. С помощью директив определяют тип аутентификации и список пользователей с паролями.
AuthType None | Basic | Digest | Form
где параметр, определяет тип авторизации.
Приведенная директива должна сопровождаться директивами AuthName и Require.
AuthName "string"
где «string» — строка, заключенная в кавычки, которая будет выводиться в браузере пользователя при выдаче страницы авторизации.
AuthUserFile pass_file
где pass_file определяет имя файла с паролями аутентификации, путь к файлу задается естественно от корня сервера. Этот файл может быть создан специальной утилитой htpasswd.
Require user_name | valid-user
где параметр директивы определяет имя пользователя, значение valid-user разрешает доступ всем пользователям, указанным в файле паролей.
Примеры использования.
# разрешение на аутентификацию двум пользователям AuthName "Private zone" AuthType Basic AuthUserFile /home/dir111/www/private_data/.htpasswd Require superuser chief # ограничение доступа к архивам сайта <FilesMatch "\.zip$"> AuthName "Enter the password please" AuthType Basic AuthUserFile /home/data/archive/.htpasswd Require valid-user </FilesMatch> # ограничение доступа к файлу паролей <Files ".htpasswd"> AuthName "Access restricted." AuthType Basic AuthUserFile /home/data/private/.htpasswd Require sysadmin </Files>
Простое перенаправление (редирект)
Инструкция простого перенаправления также часто используется администраторами для отображения нужных страниц и даже сайтов.
Redirect [status] url_old url_new
где
[status] — код перенаправления, необязательный элемент
url_old — URL запрошенного документа
url_new — URL документа, на который перенаправляется запрос
Код перенаправления status может принимать следующие значения:
- 301 — moved permanently (перемещено постоянно). Документ постоянно доступен по новому адресу
- 302 — found (найдено). Документ временно доступен по другому адресу
- 303 — see other (смотреть другое). Документ нужно запросить по другому адресу
- 305 — use proxy (использовать прокси). Запрос надо осуществлять через прокси-сервер
- 307 — temporary redirect (временное перенаправление). Документ временно доступен по другому адресу
Пример перенаправление пользователя с индексной страницы исходного сайта на другой сайт
Redirect / http://www.newsite.ru
или
Redirect 301 /downloads/download.html http://www.new.com/dist/download.html
В более сложных случаях для перенаправления пользователей можно задействовать похожую инструкцию RedirectMatch, позволяющую для определения списка старых страниц использовать мощный механизм регулярных выражений.
RedirectMatch [status] regular_expressions url_new
где
[status] — код перенаправления, необязательный элемент
regular_expressions — шаблон с использованием синтаксиса регулярных выражений.
url_new — URL документа, на который перенаправляется запрос
Примеры использования инструкции.
# все *.gif изображения запрашивать с адреса http://other_site.ru/images/ RedirectMatch 301 /images/(.*)\.gif$ http://other_site.ru/images/$1\.gif # все запрашиваемые html страницы перенаправляются на php скрипты с аналогичным именем RedirectMatch 301 (.*).html$ http://site_name.ru$1\.php
Описание регулярных выражений заслуживает, конечно, отдельной статьи, поэтому ограничимся кратким описанием некоторых использованных в примерах выражений:
- (.*) — определяет любой символ;
- \. — точка в регулярных выражениях экранируется обратным слешем \.);
- $ — знак доллара, в конце первой части выражения, говорит о завершении шаблона выражения;
- $1 — знак $1 во второй части выражения означает ссылку на любые символы, указанные ранее с помощью (.*)
Сложное перенаправление (mod_rewrite)
Инструкции сложного перенаправления основаны на использовании mod_rewrite модуля Apache, они очень широко применяются благодаря своей гибкости и мощности. Использование при этом регулярных выражений позволяет осуществить практически любые задачи тем более, что для получения нужных конечных URL модуль позволяет задействовать различные ресурсы — HTTP заголовки, переменные сервера, время, запросы к базам данных. Для подробного и обстоятельного изучения инструкций сложного перенаправления необходима отдельная статья, которую вы можете посмотреть по адресу Сложный редирект.
Обработка ошибок
При возникновении внутренней ошибки сервера .htaccess позволяет вместо стандартного и малопонятного сообщения отправить пользователю специальную страничку по каждому виду ошибки.
ErrorDocument error-code document,
где
error-code — код ошибки,
document — документ или сообщение, которое должно быть отправлено пользователю. URL может начинаться со слеша (/) относительно DocumentRoot или быть полным URL документа, как в приведенных примерах.
Примеры использования.
ErrorDocument 401 /subscription_info.html ErrorDocument 500 http://example.com/error.html ErrorDocument 401 /subscription_info.html ErrorDocument 403 "Sorry can't allow you access today" ErrorDocument 403 Forbidden!
PHP опции
Для более тонкой настройки работы PHP под сервером Apache можно использовать в том числе и директивы .htaccess. Это 2 директивы. Синтаксис их одинаков, первая используется для установки строковых или числовых значений в php.ini, вторая — для установки там же логических величин.
php_value instruction_name value php_flag instruction_name on | off
Теперь приведем список директив, которые чаще всего используются в .htaccess:
- — display_errors — управляет выводом ошибок и предупреждений у пользователя;
- — error_reporting — определяет типы фиксируемых ошибок;
- — display_startup_errors -управляет отображением ошибок при запуске PHP;
- — user_agent — при обращении PHP к другим серверам устанавливает строку User-agent в заголовке;
- — mysql.default_host — определяет имя хоста, где находится база данных;
- — mysql.default_user — устанавливает имя пользователя базы данных;
- — mysql.default_password — определяет пароль к базе данных;
- — sendmail_from — Устанавливает адрес отправителя электронной почты;
- — auto_prepend_file — назначает файл, который будет выводится в начале каждого скрипта;
- — auto_append_file — назначает файл, который добавляется в конце каждого скрипта.
Примеры.
php_flag engine off # запрет выполнения php в текущей и во вложенных директориях
php_flag register_globals offphp_flag display_errors 1
В заключение хочется отметить, что в приведенном материале описаны наиболее востребованные управляющие инструкции .htaccess файла, это далеко не полный их перечень. Тем, кто дружит с английским, есть смысл заглянуть сюда, т.к. самый надежный способ изучения — это чтение оригинальной документации.