Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


.htaccess для новичков

Файлы .htaccess используются для настройки веб-серверов (в основном речь идет об Apache, но не только). Несмотря на "странное" расширение файла, это обычный текстовый файл, который можно отредактировать в любом текстовом редакторе.

В данном материале мы рассмотрим основные моменты, которые помогут Вам при разработке своих проектов.

Для того, чтобы работать с файлами .htaccess локально и иметь возможность тестировать их, Вы можете использовать набор "Денвер", после установки которого получите на своем компьютере мини-сервер с установленными и настроенными Apache, PHP и MySQL.

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

"Настройки, заданные в .htaccess, перезапишут одноименные настройки из главного конфигурационного файла для той директории, в которой располагается данный файл .htaccess" (включая поддиректории)."

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

Хостинг

Это означает, что изменения, внесенные в .htaccess, вступают в силу немедленно, не требуя перезагрузки сервера (в отличие от настроек, заданных в главном конфигурационном файле - httpd.conf). Также это значит, что мы немного теряем в производительности, однако такое решение очень полезно, когда у нас нет доступа к главному файлу настроек сервера.

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

Редиректы (перенаправления) и "переписывание" URL-адресов

Частое использование файлов .htaccess заключается в выполнении перенаправления или переписывании URL-адресов.

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

Редиректы (перенаправления)

Редирект может иметь вид:


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

Такое перенаправление устанавливает код состояния HTTP в значение 301 (перемещено окончательно) и переводит все запросы к файлу old.htm на файл new.html.

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

Переписывание URL-адреса

Правило для переписывания URL-адреса может иметь вид:


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

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

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


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

Флаг r вызывает внешнее перенаправление, поэтому указывается полный адрес до новой страницы. Мы также можем указать код состояния при использовании флага. Это приведет к обновлению информации в адресной строке браузера посетителя.

Одно из применений переписывания URL-адресов - это создание так называемых ЧПУ (человеко-понятных URL-адресов) из длинных и "некрасивых". Давайте посмотрим, как можно это сделать:


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

Это правило приведет к тому, что в адресной строке может быть адрес вида:


products/turntables/technics/sl1210

При этом, при обращении по такому адресу будет идти его преобразование в адрес:


product.php?cat=turntables&brand=technics&prod=sl1210

Круглые скобки в регулярном выражении выше обозначают группы. Именно к ним мы обращаемся как к $1, $2 и $3 соответственно.

Набор символов [^/]+ означает, что в указанном месте могут находиться любые символы кроме прямого слэша 1 или более раз. По сути, таким шаблоном регулярного выражения мы охватываем три части URL-адреса: turntables, technics и sl1210

На практике переписывание URL-адресов может быть (и обычно бывает) более сложным и позволяет достичь интересных результатов. В рамках данной статьи мы не будем рассматривать этот момент глубже.

Задание произвольных страниц ошибок

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

Как минимум имеет смысл настроить страницы ошибок так, чтобы они не выбивались из общего дизайна сайта. Давайте рассмотрим это на простом примере:


ErrorDocument 404 "/404.html"

Вот и все, что нам нужно. Теперь, когда случится ошибка 404, то будет отображена страница с именем 404.html из корня нашего сайта. Разумеется, можно дать ей любое имя и разместить где нам удобно.

Аналогичным образом мы можем настроить отображение своих произвольных страниц и для других ошибок сервера (403, 500 и т.п.)

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

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

Чтобы предотвратить доступ ко всей папке, мы должны написать такой код:


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

Файл .htaccess с таким кодом нужно сохранить в той папке, доступ к которой мы хотим ограничить.

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

Важно, что этот файл должен быть сохранен в директории, к которой невозможно получить доступ через URL-адрес.

Запретить доступ для определенных лиц

Еще одно применение файла .htaccess - легко и быстро заблокировать все запросы с определенного IP-адреса или от определенного клиента (обычно браузера). Для того, чтобы заблокировать определенный IP-адрес, просто добавьте следующие директивы в .htaccess:


order allow,deny
deny from 192.168.0.1
allow from all

Директива order сообщает Apache в каком порядке обрабатывать директивы allow/deny (разрешить/запретить).

В примере выше сначала будет выполняться директива allow, потом - deny.

Обратите внимание, что директива allow будет выполняться первой (даже если она идет после deny), и все IP будут разрешены. А затем, если IP-адрес клиента совпадает с IP-адресом, указанным для директивы deny, доступ с него к ресурсу будет запрещен.

Если говорить кратко, то мы запретили доступ с одного IP-адреса. Обратите внимание, что мы можем запрещать доступ для целых групп IP-адресов, указывая IP вида: 192.168. Так мы охватываем целый диапазон IP.

Чтобы запретить доступ в зависимости от клиентского приложения (user-agent), мы можем поступить так:


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

В этом примере любой клиент, у которого строка HTTP_USER_AGENT начинается с "OrangeSpider" (некий зловредный бот) переадресовывается обратно на адрес, с которого он "пришел".

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

Реализация кэширования

Кэширование несложно настроить, и оно способствует более быстрой работе сайта. Установив "срок годности" для элементов сайта, которые редко изменяются, где-то в далеком будущем, мы получаем следующее преимущество: мы предотвращаем лишние повторные обращения браузера к серверу, повышая скорость отклика и работы сайта в целом:


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 просто гарантирует нам, что включен специальный модуль, который осуществляет гененрирование загловков со "сроком годности".

Выполнение данных директив зависит от того, установлен ли на Apache соответствующий модуль - mod_expires.

Включение сжатия

Еще один момент, влияющий на скорость работы приложения - сжатие контента. Реализовать его можно подобным образом:


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 для сжатия контента на основании загловков content-type. В нашем случае мы указали text/html, text/css и $text/javascript.

В примере выше с помощью директивы FilterDeclare мы объявляем фильтр, который хотим использовать (COMPRESS). Затем перечисляем типы контента, которые должен обработать этот фильтр.

Директива FilterChain инструктирует сервер о том, что нужно построить цепочку фильтров на основании директив FilterProvider, которые перечилсены чуть выше.

Директива FilterProtocol позволяет нам указать настройки, которые применяются к цепочке фильтров во время их (фильтров) работы. Мы используем настройки change=yes (контент может быть изменен фильтром, в нашем случае он может быть сжат) и byteranges=no (фильтр должен применяться только к целым файлам).

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


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

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

Как правило, Ваш веб-сервер будет использовать один из этих модулей в зависимости от того, какая версия Apache на нем установлена.

Скорее всего, Вы будете знать это заранее, но если Вы создаете общий .htaccess файл, который будет использоваться на ряде сайтов (и Вы не сможете знать об установленных модулях заранее), имеет смысл использовать оба блока кода выше, заключенных в директиву <IfModule module_name>. Это позволит использоваться нужному модулю не приводя к ошибке 500 при попытке настраивать и использовать несуществующий модуль.

Заключение

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

Источник: http://net.tutsplus.com
Перевод: Дмитрий Науменко

P.S. Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить этот мощный язык веб-разработки:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх