Файл .htaccess позволяет настраивать веб-сайт на сервере Apache без необходимости изменять файлы конфигурации сервера. В данном руководстве мы рассмотрим наиболее распространенные примеры его использования. Однако, прежде чем перейти к работе с этим файлом, необходимо сделать важное замечание. Несмотря на то, что страница .htaccess может быть очень полезной и существенно улучшить сайт, у нее есть два фактора негативного влияния:
1. Скорость — страница .htaccess может немного замедлить работу вашего сервера, хотя для большинства серверов это изменение будет незаметным. Это связано с расположением страницы: она влияет на все страницы в своей директории и в ее поддиректориях. При каждой загрузке страницы сервер сканирует ее директорию и все директории выше, пока не дойдет до верхнего уровня или файла .htaccess. Эти действия выполняются всегда, когда параметр AllowOverride (о нем чуть ниже) разрешает использование файлов .htaccess, независимо от того, существуют ли эти файлы на самом деле.
2. Безопасность — файл .htaccess гораздо доступнее стандартной конфигурации Apache, а изменения вносятся мгновенно (без необходимости перезапуска сервера). Предоставление пользователям права внесения изменений в файл .htaccess предоставляет им значительный контроль над самим сервером. Любая директива в файле .htaccess действует так же, как директива в самой конфигурации Apache.
В целом Apache не рекомендует использовать файл .htaccess, если пользователь сам может работать с файлами конфигурации Apache.
Подключение файла .htaccess
Если у вас есть доступ к настройкам сервера, вы можете изменить конфигурацию, чтобы разрешить использование .htaccess вместо стандартной конфигурации веб-сайта. Откройте файл конфигурации узла apache2 по умолчанию (для этого вам потребуются привилегии суперпользователя):
$ sudo nano /etc/apache2/sites-available/default
Найдите в этом файле следующий раздел и измените значение параметра AllowOverride c None на All. В конечном итоге раздел должен выглядеть так:
Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all
Сохраните и закройте этот файл, а затем перезапустите apache.
$ sudo service apache2 restart
Создание файла .htaccess
Файл .htaccess можно создать в любом текстовом редакторе, например:
$ sudo nano /var/www/example.com/.htaccess
Убедитесь, что его имя строго .htaccess, а затем при помощи ftp-клиента загрузите его на сайт.
Использование файла .htaccess
Использование файла .htaccess не требует таких высоких привилегий, как доступ файлу apache2.conf, но при этом позволяет осуществлять эффективное управление сайтом. Далее мы рассмотрим ряд примеров применения этого файла.
Управление доступом
Файл .htaccess может применяться для гибкого разграничения доступа к вашему сайту или отдельным его страницам. Один из типичных вариантов – запрет доступа с определенных IP-адресов, например, следующий код запрещает доступ со всех адресов, кроме 192.168.1.1. Это полезно при обслуживании сайта, когда требуется закрыть доступ для всех, кроме администратора.
Order Allow,Deny Deny from All Allow from 192.168.1.1
Директива Order указывает порядок выполнения следующих директив (сначала Allow — разрешение, затем Deny — запрет). Deny from All
запрещает доступ вообще, но так как в соответствии с порядком выполнения сначала разрешен доступ с адреса 192.168.1.1, запрет будет действовать для всех, кроме указанного адреса. Вместо IP-адресов можно указывать подсети (например, формат 192.168 означает подсеть 192.168.x.x) или доменные имена.
Аутентификация
Использование .htaccess позволяет выделить определенную часть сайта и защитить ее паролем. Пароли .htaccess хранятся в файле .htpasswd. Создайте файл, внесите в него имена и пароли всех пользователей, которым вы хотите предоставить доступ к защищенной части сайта, и сохраните его. Файл не должен находиться в веб-директории (по соображениям безопасности). Введите в этот файл любое необходимое количество записей в формате пользователь:пароль. Для каждого пользователя нужно создать отдельную строку. Пароль должен быть указан в закодированном виде. Для кодирования паролей можно воспользоваться специальным сайтом или программой htpasswd, которая входит в комплект установки Apache. Для создания файла и добавления пользователей с помощью утилиты httpasswd используйте команду
htpasswd -cm .htpasswd admin
Эта команда создаст пользователя admin и запросит ввести пароль для него. После ввода пароля запись в файл .htpasswd будет добавлена.
После этого нужно разместить файл .htaccess в директории, к которой требуется защитить доступ, и ввести в него следующий код:
AuthUserFile /usr/local/username/safedirectory/.htpasswd
AuthGroupFile /dev/null
AuthName «Пожалуйста, введите пароль»
AuthType Basic
Require valid-user
Рассмотрим значение этих параметров:
AuthUserFile: путь к файлу .htpasswd на сервере
AuthGroupFile: эта строка используется для обозначения месторасположения файла .htgroup. Так как мы его не создавали, можем указать здесь /dev/null.
AuthName: Текст, отображаемый в предложении ввести пароль.
AuthType: Тип аутентификации, используемый для проверки пароля. При проверке паролей через HTTP нужно оставить значение Basic.
Require valid-user: Ключевая фраза, которая указывает файлу .htaccess наличие нескольких пользователей, которым требуется обеспечить возможность входа в защищенную паролем часть сайта. Другой возможный вариант – ключевая фраза «require user username», обозначающая конкретного пользователя с разрешенным доступом.
Сообщения об ошибках
Файл .htaccess позволяет вам создавать для своего сайта собственные страницы, сообщающие об ошибках. Вот некоторые из наиболее распространенных ошибок:
400 Ошибка в запросе
401 Требуется авторизация
403 Доступ запрещен
404 Файл не найден
500 Внутренняя ошибка сервера
Можно воспользоваться файлом .htaccess для создания собственных страниц, которые будут более дружественны к пользователю и предоставлять больше информации, чем стандартные сообщения сервера об ошибках.
Для примера мы рассмотрим страницу 404, аналогичным образом можно описать в файле .htaccess страницы для других ошибок. Естественно, сначала нужно создать саму страницу с необходимой информацией и загрузить ее на сервер. Затем укажите ее месторасположение в файле .htaccess:
ErrorDocument 404 /new404.html
В рассматриваемом примере сервер будет искать страницу 404 в корневой директории сайта. Если она находится в какой-либо поддиректории, нужно указать путь, например:
ErrorDocument 404 /error_pages/new404.html
Описание типов MIME
Если на вашем сайте есть файлы каких-либо приложений, для отображения которых ваш сервер не настроен, в файле .htaccess можно описать типы MIME при помощи следующего кода, чтобы браузер отображал их в необходимом формате:
AddType audio/mp4a-latm .m4a
В данном примере для файлов с расширением .m4a задано представление в виде аудиозаписей. Для поддержки других типов MIME укажите соответствующий тип и расширение файла.
Серверные включения
Серверные включения (Server Side Includes, SSI) позволяют добиться значительного повышения скорости открытия сайта. Они представляют собой директивы для динамической генерации данных на странице сервером перед ее отправкой клиенту. Один из наиболее распространенных вариантов использования SSI – обновление большого количества страниц с передачей определенных данных вместо обновления каждой страницы по отдельности (например, если вам нужно заменить цитату в нижней части страницы).
Для использования SSI введите в файл .htaccess следующий код:
AddType text/html .shtml AddHandler server-parsed .shtml
Первая строка задает интерпретацию файлов с расширением .shtml как html-кода, а вторая – обработку таких файлов с любыми командами SSI на сервере.
Однако, если у вас много страниц .html, и вы не хотите менять расширение, для их обработки команд SSI в этих файлах можно воспользоваться XBitHack. Следующая строка в файле .htaccess заставляет сервер проверять все html-файлы с соответствующими разрешениями на наличие SSI:
XBitHack on
Для того, чтобы установить необходимые для XBitHack разрешения, воспользуйтесь командой:
chmod +x имя_страницы.html
Редирект
Эти директивы используются с завидной регулярностью. Они позволяют перенаправить посетителя со старого URL на новую страницу. Это возможно благодаря 301-редиректу. Достаточно в код файла вписать:
Redirect 301 /index.html http://domain.ru/newindex.html
В целом директива будет отображена в таком виде:
Redirect [status] URL_LOCAL URL_REDIRECT
URL_LOCAL – это старый адрес, с которого осуществляется перенос пользователя.
URL_REDIRECT – новый URL, куда переносится страница.
В поле [status] могут быть следующие значения:
301 – страница перенесена навсегда.
302 – страница перенесена на время.
303 – смотрите другую страницу.
410 – страница удалена.
Модуль Mod_Rewrite
Одна из наиболее полезных функций файла .htaccess – его использование с модулем mod_rewrite, который применяется для перезаписи URL, отображаемых в браузере пользователя. Это может использоваться для их представления в более удобочитаемом формате и других задач, например, редирект с http на https можно настроить следующим образом.
RewriteEngine On RewriteCond %{HTTP:PORT} !^443$ RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
Первая строка активирует модуль Mod_Rewrite, а две последующие при попытке соединения по отличному от 443 порту переписывают URL, чтобы он начинался не с HTTP, а c HTTPS, перенаправляя посетителя на защищенное соединение.
Управление кэшированием данных
Файл .htaccess можно использовать для задания различных сроков кэширования контента вашего сайта. Целесообразно увеличить срок кэширования для редко меняющихся данных, чтобы ускорить загрузку сайта. Например, следующий код
ExpiresActive on ExpiresByType image/jpeg "access plus 1 day" ExpiresByType image/gif "modification plus 3 months" ExpiresByType text/html "now"
отключает кэширование для HTML, для изображений JPEG устанавливает срок в 1 день с момента обращения, а для GIF — 3 месяца с момента модификации файла.
Заключение
Страница .htaccess обеспечивает значительную гибкость при создании сайтов, но наше руководство достаточно краткое. Более подробную информацию о возможностях файла .htaccess можно получить в документации для сервера Apache.