Настройка файла htaccess

Файлы .htaccess для всех

От автора: файлы .htaccess используются для настройки и конфигурирования веб-сервера Apache, а также ряда других веб-серверов. Несмотря на тип расширения файла .htaccess, это простые текстовые файлы, с которыми можно работать в любом редакторе. В этой статье мы рассмотрим, что они собой представляют, настройку файла htaccess и как их можно использовать в своих проектах.

Следует отметить, что файлы .htaccess не работают в системах на базе Windows, хотя их можно отредактировать и выгрузить на совместимый веб-сервер, а в системах на базе Linux они скрыты по умолчанию.

Детали учебника «Настройка файла htaccess»

Сложность: Средняя

Тема: Сайтостроение

Для локальной работы с файлами htaccess можно использовать XAMPP (или MAMP) на Mac – пакет, который устанавливает и конфигурирует Apache, PHP и MySQL. Для редактирования файлов .htaccess на Mac нужно применить текстовый редактор, позволяющий открывать скрытые файлы, такой как TextWrangler.

Файл .htaccess поддерживает тот же формат, что и основной файл конфигурации Apache: httpd.conf. Многие настройки, изменяемые с помощью основного файла конфигурации, кроме того, могут в нем регулироваться, и наоборот.

Настройка, измененная в файле .htaccess, отменит ту же настройку в основном файле конфигурации для содержащего этот файл каталога, а также для всех его подкаталогов.

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

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

Переадресация и перезапись URL

Файлы .htaccess широко используются для выполнения переадресации или перезаписи URL’ов. Это очень удобно при оптимизации SEO после смены доменного имени, или при реорганизации файловой структуры, или для сокращения длинного некрасивого URL’а и превращения его в более удобный и запоминающийся.

Переадресация

Переадресация может быть совсем простой, как тут:

Redirect 301 ^old\.html$ http://localhost/new.html

Тут код статуса HTTP устанавливается на 301 (постоянно меняемый) и переадресовывает все запросы к old.html прямиком на new.html. Для совмещения URL’а с переадресацией мы применяем регулярное выражение, что даёт нам отличный контроль над применением только верного URL’а, но усложняет конфигурацию и управление ей. Требуется полный URL переадресовываемого ресурса.

Перезапись

Перезапись может быть простой, как здесь:

RewriteEngine on
RewriteRule ^old\.html$ new.html

В этом примере мы всего лишь делаем простую переадресацию от одного файла к другому, что тоже выполняется прямиком, без изменений, отображаемых в адресной строке. Первая команда, RewriteEngine on, просто гарантирует, что механизм перезаписи включён.

Для обновления того, что отображено в адресной строке браузера посетителя, можно использовать метку R в конце RewriteRule, например:

RewriteRule ^old\.html$ http://hostname/new.html [r=301]

Метка r вызывает внешнее перенаправление, вот почему тут приведен полный URL (пример URL здесь) новой страницы. Также при использовании метки можно определить код состояния. Таким образом обновляется адресная строка браузера пользователя.

Одним из возможных использований перезаписи URL, упомянутых мной в начале этого раздела – это сделать некрасивые URL’ы (содержащие информацию строкового запроса) более дружественными для посетителей и поисковых движков. Давайте рассмотрим это в действии:

RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

Это правило позволит посетителям использовать такой URL, как products/turntables/technics/sl1210, и преобразовать его в product.php?cat=turntables&brand=technics&prod=sl1210. Круглые скобки между косыми чертами в вышеприведенном регулярном выражении – это собирающие группы – мы можем применять любую из них, как $1, $2 и $3 соответственно. Символьный класс [^/]+ в круглых скобках означает совпадение любого символа один или более раз, кроме косой черты

На практике перезапись URL может оказаться (и обычно так и есть) намного сложнее и добиться с её помощью можно гораздо большего. Перезапись URL лучше объясняется в отдельных учебниках, поэтому здесь мы её детально рассматривать не станем.

Создание необычных страниц ошибок

Стандартную страницу ошибки 404 демонстрировать больше не «круто». На многих сайтах пользуются возможностью, предоставляемой ошибкой file not found, для того, чтобы внести в нее некоторую долю юмора, хотя подразумевается, что худо-бедно, но страница с ошибкой 404 должна соответствовать стилю и теме любой другой страницы сайта.

Что очень близко связано с перезаписью URL’а, с помощью файла .htaccess легко обслуживать пользовательскую страницу ошибки 404 вместо стандартной:

ErrorDocument 404 "/404.html"

Это – всё, что нам нужно; при возникновении ошибки 404 всегда отображается указанная страница. Еще мы можем конфигурировать страницы для отображения многих других ошибок сервера.

Ограничение доступа к определённым ресурсам

С помощью файлов .htaccess можно включить защиту любого файла или каталога паролем — для всех пользователей или в зависимости от домена или IP адреса. Это, помимо всего, и есть один из основных методов их применения. Чтобы предотвратить доступ ко всему каталогу, просто создаём файл .htaccess, содержащий следующий код:

AuthName "Username and password required"
AuthUserFile /path/to/.htpasswd
Require valid-user
AuthType Basic

Затем этот файл нужно поместить в каталог, требующий защиты. Указатель AuthName определяет сообщение, которое следует отобразить в диалоговом окне «имя пользователя/пароль», AuthUserFile должен послужить путём к файлу .htpasswd. Указатель Require уточняет, что только авторизовавшиеся пользователи могут получить доступ к защищённому файлу, в то время как AuthType установлен на Basic.

Чтобы защитить некий файл, можно обернуть вышеупомянутый код в указатель files, определяющий защищённый файл:

<Files "protectedfile.html">
   AuthName "Username and password required"
   AuthUserFile /path/to/.htpasswd
   Require valid-user
    AuthType Basic
</Files>

Нам также нужен файл .htpasswd для тех типов аутентификации, где содержится список разделённых двоеточием имён пользователей и зашифрованных паролей, требуемых для получения доступа к защищённому ресурсу(ам). Этот файл нужно сохранить в каталог, недоступный из сети. Существует ряд сервисов, которые можно использовать для автоматического генерирования этих файлов, так как пароли должны сохраняться в зашифрованном виде.

Блокирование доступа к определённым объектам

Файл .htaccess, кроме того, применяется для быстрой и легкой блокировки всех запросов с IP-адреса или агента пользователя. Чтобы блокировать некий IP-адрес, просто добавьте в свой файл .htaccess следующий код:

order allow,deny
deny from 192.168.0.1
allow from all

Указатель order говорит Apache, в каком порядке оценивать директивы allow/deny. В данном случае первым оценивается allow, а за ним deny. Указатель allow from all оценивается самым первым (даже если появляется после deny) и разрешаются все IP, далее, если IP клиента соответствует указанному в параметре deny, доступ запрещается. Таким образом, доступ разрешается всем IP, кроме указанного. Следует отметить, что, кроме того, можно лишить доступа целые блоки IP, предоставив более короткий IP, например, 192.168.

Для запрета запросов с агента пользователя можно сделать следующее:

RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider
RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$ [r=301,l]

В этом примере любой клиент со строкой HTTP_USER_AGENT, начинающейся с OrangeSpider (вредный бот), перенаправляется обратно к адресу, с которого был инициирован. Регулярное выражение сопоставляет любой одиночный символ (.) ноль или более раз (*) и переадресовывает к переменной среды %{REMOTE_ADDR}. Метка l, которую мы здесь применили, отдает Apache указание рассматривать это соответствие как последнее правило, и, таким образом, до перезаписи прочие правила выполняться не будут.

Вмешиваемся в режим визуализации IE

Наряду с контролем над тем, как сервер отвечает на определённые запросы, можно сделать кое-что с браузером пользователя, например, вынудить IE отображать страницы, используя определённый движок визуализации. Так, можно применить модуль mod_headers, если тот присутствует, для установки заголовка X-UA-Compatible:

Header set X-UA-Compatible "IE=Edge"

Путем добавления этой строки в файл .htaccess IE отдается указание применить самый высокий доступный режим отображения. Как показывает HTML5 Boilerplate, еще можно избежать установки этого заголовка в не требующие его файлы, использовав параметр FilesMatch следующим образом:

<FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|
ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|xpi|safariextz|vcf)$" >
      Header unset X-UA-Compatible
</FilesMatch>

Осуществление кэширования

Кэширование легко настраивается и способно заставить сайт быстрее загружаться. Этим сказано все! Установив большой срок действия для тех элементов сайта, которые не меняются часто, можно предотвратить постоянные запросы браузера к неизменённым ресурсам.

Если вы проверяете свой сайт на Google PageSpeed или Yahoo’s YSlow и получили сообщение об установке долгосрочных заголовков, то вот как это можно исправить:

ExpiresActive on
ExpiresActive on
ExpiresByType image/gif                 "access plus 1 month"
ExpiresByType image/png                 "access plus 1 month"
ExpiresByType image/jpg                 "access plus 1 month"
ExpiresByType image/jpeg                "access plus 1 month"
ExpiresByType video/ogg                 "access plus 1 month"
ExpiresByType audio/ogg                 "access plus 1 month"
ExpiresByType video/mp4                 "access plus 1 month"
ExpiresByType video/webm                "access plus 1 month"

Разные параметры ExpiresByType можно установить для любого контента, перечисленного в применяемом вами инструменте исполнения, или чего угодно, где нужно управлять кэшированием. Первый указатель, ExpiresActive on, просто гарантирует, что генерация Expires headers включена. Эти указатели зависят от Apache, загружающего модуль mod_expires.

Включаем сжатие

Другое предупреждение, которое можно получить в процессе проверки производительности, относится к включению сжатия, и это тоже можно исправить, просто обновив файл .htaccess:

FilterDeclare   COMPRESS
FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html
FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css
FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/javascript
FilterChain     COMPRESS
FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no

Эта схема сжатия работает на новых версиях Apache (2.1+), применяющих модуль mod_filter. Он использует алгоритм DEFLATE для сжатия контента в зависимости от его типа, и в этом случае мы определяем text/html, text/css и text/javascript (которые, скорее всего, окажутся видами файлов, помеченных в PageSpeed/Yslow).

применить, используя параметр FilterDeclare – в данном случае COMPRESS. Затем перечисляем виды контента, для которого нам нужно использовать этот фильтр. Указатель FilterChain отдает команду серверу выстроить цепь фильтров на основе перечисленных нами параметров FilterProvider. Параметр FilterProtocol дает возможность определять опции, примененные к последовательности фильтров, всякий раз, когда она запускается; опции, которые нам следует использовать – это change=yes (контент может быть изменён фильтром (в данном случае – сжат) и byteranges=no (фильтр должен применяться только к определённым файлам).

В более старых версиях Apache модуль mod_deflate используется для конфигурирования сжатия DEFLATE. В этом случае у нас меньше контроля над тем, как фильтруется контент, а указатели проще:

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/javascript

Здесь мы всего лишь устанавливаем алгоритм сжатия с помощью указателя SetOutputFilter, а затем определяем виды контента, который нужно сжать, используя параметр AddOutputFilterByType.

Обычно веб-сервер применяет один из этих модулей в зависимости от того, какая версия Apache используется. Обычно вы знаете это заранее, но если создаётся универсальный файл .htaccess, который можно использовать на многих сайтах, или которым можно поделиться с другими людьми, и потому неизвестно, какие модули применить, то вы можете использовать оба вышеприведенных программных блока, обёрнутых в указатели IfModule module_name для того, чтобы использовался подходящий модуль и сервер не выдавал по 500 ошибок, если мы станем вдруг конфигурировать модуль, невнесенный в список. Вам нужно знать, что для хостов, работающих с большим количеством сайтов с единственного блока, сжатие отключают, поскольку при сжатии на сервере происходит небольшая потеря производительности CPU.

Заключение урока по настройке файла htaccess

Мы рассмотрели несколько примеров основновных настроек файла htaccess и то как решать определённые задачи, интересующие нас, создающих и поддерживающих сайты. Как обычно случается с подобным вводным уроком, затронутая тема представляется как введение в отдельный предмет. Существует множество дополнительных опций и конфигураций, которые следует исследовать, так что я настоятельно рекомендовал бы вам продолжить чтение на особенно интересные вам темы.

На этом, урок по настройке файла htaccess, окончен надеюсь вам всё понравилось.

Автор: Dan Wellman

Источник: http://net.tutsplus.com/

Редакция: Команда webformyself.

Хотите узнать, что необходимо для создания сайта?

Посмотрите 3-х минутное видео и у Вас будет четкий пошаговый план по созданию сайта с нуля!

Смотреть видео

Метки: , , ,

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (8)

  1. Александр

    Извиняюсь конечно, но на системе Windows файлы «.htaccess» нормально работают (в начале статьи написано, что только Unix-системы). Если грузить «чистый» Apache, то надо вручную включать поддержку «.htaccess». А на сборках вида WAMP или Denwer все работает прекрасно :) И не забудьте, что директиву «RewriteEngine on» всегда надо ставить до других Rewrite-директив

    • Андрей Кудлай

      Файлы .htaccess используются веб-сервером Apache и не обрабатываются веб-сервером IIS Windows-хостинга. Думаю, автор имел в виду именно это. Как «заставить» работать этот файл можно прочитать, к примеру, на хабре.

  2. Никита Рябин

    А в вордпресс уже по умолчанию идёт этот файл, его и править сильно не нужно.

    • Александр

      Согласен. Но иногда приходится править вручную (когда WP Super Cache не может перезаписать из-за неправильных прав на «.htaccess») и лень лесть в админку, то я копирую/вставляю с другого рабочего сайта. Или сделать редирект всех ссылок с http://site.com на http://www.site.com. Или еще интереснее :) Добавить «.html» ко всем статьям.

  3. Александр

    И, когда в комментариях пишешь смайлы, то у них (у картинок) в стиле «.comment-author img» (файл style.css -> строка 802) указано «float: left» и смайл становиться не туда :)

    • Андрей Кудлай

      А вот за это спасибо ;)
      А то как-то все руки не доходили до этой проблемы… думал, что дело в парсере, а оказывается, что это в стилях намудрили :)

  4. Александр

    Давно искал подробное описание по htaccess Спасибо большое!

  5. UDAV

    Почему кеширование не срабатывает? Надо еще что-то настраивать на сервере?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree