НЕ МОЛЧИ!!!    Сделай что-нибудь, чтобы остановить войну России в Украине.
...бойтесь людей равнодушных - именно с их молчаливого согласия происходят все самые ужасные преступления на свете.   ("Репортаж с петлёй на шее")

Инструкции .htaccess

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

Инструкции 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 инструкций

Отображение индексных страниц

По умолчанию, если не указан конкретный документ, как правило, открывается страница 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 файла, это далеко не полный их перечень. Тем, кто дружит с английским, есть смысл заглянуть сюда, т.к. самый надежный способ изучения — это чтение оригинальной документации.