htaccess – что это?
Статья также доступна на украинском (перейти к просмотру).
Файл htaccess – конфигурационный файл веб-сервера Apache уровня каталога. Он содержит набор инструкций, обуславливающих принципы работы ПО Apache в рамках текущего каталога и дочерних папках без внесения изменений в общие настройки веб-сервера.
Для простоты понимания рассмотрим основные принципы работы веб-приложений в рамках протоколов http и https (например, обычные сайты). Сам сайт представляет собой в наиболее простом виде совокупность контента и программного кода. Последний используется как логика доступа к контенту. То есть, это набор мультимедийных (изображения, аудио, видео) файлов, а также текстовых файлов, содержащих код. Все эти файлы записывают в определенный каталог компьютера, который называют сервером.
Однако, одной программной логики самого сайта недостаточно для взаимодействия с ним. На серверах хранятся сразу несколько веб-приложений, и для одновременной и бесперебойной работы каждого из них требуется ПО более высокого уровня, которое берет на себя задачи по управлению сразу всеми запросами, поступающими от клиентов (обычных пользователей интернета). В качестве такого ПО выступает Apache.
Этот популярный веб-сервер поставляется в виде ПО с открытыми исходными кодами и обеспечивает возможность внесения тонких настроек в его функционал с помощью различных конфигурационных файлов. htaccess – это один из таких файлов. Он выполняет следующие основные функции:
- Переопределение директив (команд, обуславливающих принципы работы веб-сервера), которые хранятся в основном конфигурационном файле – httpd.conf, для локальных нужд (для определенного каталога).
- Настройка работы интерпретатора PHP (некоторые важные функции).
- Использование для ограничения доступа к некоторым каталогам.
- Выбор кодировки символов.
- Замена сложных URL на более простые и понятные (ЧПУ).
- Указание директив простого, сложного перенаправления при навигации по сайту и многое другое.
Содержание
- Создание файла htaccess
- Особенности синтаксиса директив
- Управление доступом при помощи htaccess
- Все о htaccess - основные возможности
- Модуль mod_rewrite
- htaccess - кодировка страниц и управление доступом
- Внесение изменений в настройки PHP
- Выводы
- Статьи по теме
Создание файла htaccess
Представляет собой обычный текстовый файл, поэтому может быть создан в простейшем текстовом редакторе (например, Блокнот в Windows). При создании учитывают некоторые правила, касающиеся особенностей наименования, кодировки и прочего:
- В качестве имя указывают “.htaccess” (в начале слова должен обязательно присутствовать символ «.», регистр имеет значение, поэтому строчные буквы не допускаются).
- При выборе типа файла указывают «Все файлы».
- Для удобства написания директив следует выбрать формат переноса по словам.
- В качестве кодировки используют ASCII.
При создании файла htaccess на компьютере с MacOS следует упустить точку в начале названия, чтобы файл был видимым в системе. После перемещения файла на веб-сервер его можно переименовать в соответствии с требованиями. Этот конфигурационный сайт может находиться в корневой директории самого сервера (/public_html) либо веб-приложения (/public_html/site_name.net). Настройки сделанные в файле .htaccess распространяются на каталог в котором размещен файл и все поддиректории. Загрузить файл со своего компьютера на сервер можно при помощи FTP клиента (см. Справка по работе с FTP).
Особенности синтаксиса директив
Синтаксисы кодов, используемых для конфигурирования httpd.conf и .htaccess полностью совпадают. Здесь также предусмотрена возможность комментирования с использованием символа “#”, текст после которого не рассматривается сервером как инструкция. Это удобно для пояснений и отключения некоторых директив без необходимости их полного удаления из файла.
Управление доступом при помощи htaccess
Чтобы полностью запретить веб-доступ, вводят следующие команды:
Order Deny,Allow Deny from all
Если в качестве исключения требуется разрешить доступ для определенного IP, к указанным выше строкам добавляют команду “allow from 192.168.0.1” (где 192.168.0.1 – требуемый адрес).
Для установления запрета на доступ к некоторому файлу вводят следующие инструкции:
<Files private.html> Order Allow,Deny Deny from all </Files>
Любая директория может быть защищена с использованием пароля:
AuthType Basic AuthName "имя_защищенной_директории" AuthUserFile /home/cpanel_user/.htpasswds/public_html/smth/passwd require valid-user
Предпоследняя команда указывает на директорию, в которой хранится некоторый файл, защищенный с использованием пароля.
Все о htaccess – основные возможности
Правильная настройка файла htaccess позволяет вносить некоторые изменения в работу веб-сервера без получения административных прав. Управлять директивами основного конфигурационного файла (httpd.conf) могут только администраторы.
В процессе обработки запросов веб-сервер может генерировать коды различных ошибок. Например, если введенный URL ссылается на несуществующую страницу, Apache отправит код, который может быть непонятен рядовому пользователю. При разработке веб-приложений создают отдельные страницы с пояснениями ошибок (например, «Ошибка 404 – страницы не существует»). Чтобы организовать процесс автоматического перенаправления на данную страницу, используют следующую директиву в файле htaccess:
ErrorDocument 404 http://website.net/error/404.html
Некоторые хостинг-провайдеры упрощают процесс создания страниц ошибок и организации перенаправления. Например на нашем виртуальном хостинге страницы ошибок устанавливаются при помощи панели управления.
Чтобы задать в htaccess перенаправление на файл страницы сайта, используют директиву 301. Данная директива имеет следующий синтаксис:
Redirect 301 /some_page.html http://website.net/some_another_page.html
Если требуется выполнить перенаправление на новый домен (актуально например, если сайт был перенесен, а часть посетителей привыкли использовать старое доменное имя), вводят следующую директиву:
Redirect 301 / http://www.new_website_domain.net/
Что касается редиректа, некоторые разработчики выполняют htaccess 404 редирект, то есть перенаправление, например, на главную страницу веб-ресурса в случае получения запроса на несуществующую страницу. С точки зрения SEO данный подход считается некорректным.
Модуль mod_rewrite
Это один из наиболее часто используемых модулей Apache. Его основная задача состоит в динамической замене входящих URL с учетом правил, заданных с использованием двух директив. Например, модуль часто используют для перенаправления с одного URL на другой, использования более понятных URL (ЧПУ).
Например, довольно распространенное явление (если обратить внимание на адресную строку веб-браузера) – сложные URL, состоящие из различных символов. К примеру: http://website.net/v123/cat56/77/12 или http://website.net/index.php?cat=23&subcat=2&id=127. Примером ЧПУ является http://website.net/shop/product/apple.
Apache ведет логи ошибок, используемые для получения сведений о той или иной проблеме. Модуль mod_rewrite ведет отдельный лог, в котором сохраняются все преобразования, производимые над URL. Для настройки логов предусмотрена директива LogLevel.
Для включения рассматриваемого модуля в файл htaccess вводят директиву: RewriteEngine on.
Директива RewriteRule - что это?
Для установки правил перезаписи URL используют директиву RewriteRule. Она имеет следующий типовой вариант синтаксиса:
RewriteRule шаблон_URL подставляемый_URL [дополнительные_действия]
В качестве шаблона указывают регулярное выражение. В качестве подставляемого URL может быть указан путь к каталогу или файлу в файловой системе, абсолютный или относительный URL, а также символ «-», наличие которого свидетельствует об отсутствии выполнения какой-либо замены URL.
mod_rewrite обеспечивает возможность частичной замены.
Директива rewriteCond – что это?
Это вторая важная директива рассматриваемого модуля, позволяющая задать способ поиска совпадений: по имени хоста (%{HTTP_HOST}), по строке запроса
(%{QUERY_STRING}), по порту (%{SERVER_PORT}).
Один из наиболее распространенных случаев использования модуля – организация перенаправления с http на https:
RewriteEngine on RewriteCond %{HTTPS} !on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
htaccess - кодировка страниц и управление доступом
Веб-браузер содержит функционал определения требуемой кодировки страниц. В конфигурационном файле кодировка может быть задана по умолчанию с помощью директивы:
AddDefaultCharset ANCII
Если необходимо установить кодировку для файлов с определенным расширением (например, html), в htaccess записывают:
AddType "application/x-httpd-php3; charset=windows-1251" .html
Рационально использовать кодировку UTF-8, поскольку она является наиболее распространенной в мире и является кодировкой по умолчанию в большинстве CMS.
Для установки запрета на доступ к некоторым файлам используют директиву FilesMatch. Например, если необходимо закрыть доступ к файлам определенных расширений, в htaccess вводят следующие строки:
<FilesMatch "\.(htaccess|htpasswd|html|txt|psd|log|sh)$> Order Allow,Deny Deny from all </FilesMatch>
Внесение изменений в настройки PHP
По понятным причинам htaccess не предоставляет доступ ко всем настройкам интерпретатора PHP. Однако, с помощью этого конфигурационного файла устанавливают два важных параметра:
- Длительность ожидания выполнения скрипта (php_value max_execution_time время_ожидания);
- Максимальный объем загружаемых файлов в Мб (php_value upload_max_filesize размер_файлаM).
Кроме того, можно указать отдельный файл для ведения записей об ошибках PHP с помощью директивы php_value error_log.
Выводы
Файл htaccess используется для удобства настройки параметров работы веб-сервера для каждого проекта (сайта) из множества, работающих в рамках одного физического сервера. С его помощью можно управлять правами доступа, выполнять перенаправления, улучшать читабельность URL, вносить изменения в настройки PHP и многое другое. Предпочтительный вариант для владельцев масштабных проектов, требующих внесения тонких настроек в httpd.conf, - выделенный сервер.
В случае если Вы редактируете существующий файл .htaccess, обязательно сделайте его резервную копию перед началом работы. Если после внесения изменений в файл Вы получаете ошибку сервера 500, это означает, что в htaccess была допущена ошибка, либо используется запрещенная директива.
Статьи по теме:
- Все про mod_rewrite http://httpd.apache.org/docs/current/mod/mod_rewrite.html
- Хороший пример по ЧПУ http://www.codenet.ru/webmast/php/mod_rewrite.php
Попробуйте наш ua хостинг совершенно бесплатно на протяжении 7 дней. Если у Вас возникнут вопросы по использованию файла .htaccess, наша техническая поддержка всегда готова оказать грамотную консультацию.