Введение в использование файла .htaccess

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

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

Установки, заданные в файле .htaccess в каталоге, будут иметь более высокий приоритет перед установками, заданными в 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 к более простой форме для посетителей и поисковых роботов. Рассмотрим пример:

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

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

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

 

Пользовательская страница ошибок

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

Правило для изменения странницы 404 очень похоже на правило перенаправления:

ErrorDocument 404 "/404.html"

Если происходит ошибка 404, будет выводиться указанная страница. Также можно сделать страницы для отображения других серверных ошибок.

 

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

С помощью файла .htaccess мы можем ограничить доступ к любому файлу или каталогу. Например, код:

AuthName "Введите имя пользователя и пароль"
AuthUserFile /path/to/.htpasswd
Require valid-user
AuthType Basic

Нужно разместить в каталоге, который требуется защитить от свободного доступа. Директива  AuthName определяет сообщение, которое будет выводиться в диалоговом окне для ввода пароля, а в правиле AuthUserFile определяется путь к файлу .htpasswd. Директива Require определяет, что только зарегистрированные пользователи могут получить доступ к файлу.

Для защиты определенного файла нужно заключить выше приведенный код в директиву <files>, в которой определяется имя файла:

<Files "protectedfile.html">
   AuthName "Введите имя пользователя и пароль"
   AuthUserFile /path/to/.htpasswd
   Require valid-user
   AuthType Basic
</Files>

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

 

Блокируем доступ для определенных посетителей

Еще одним использованием файла .htaccess является быстрое и простое блокирование всех запросов с определенного 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 адресов, указав, например, 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 использовать самый лучший доступный режим вывода. Мы также можем избежать использования данного заголовка для файлов, где он не требуется, с помощью правила <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>

 

Включаем кеширование

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

Например:

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 просто включает генерацию заголовка устарения ресурса. Данная директива зависит от наличия модуля mod_expires на сервере Apache.

 

Разрешаем сжатие

Еще одним способом влияния на производительность ресурса является использование сжатия:

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 в качестве типов ресурсов, которые будут сжиматься.

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

Заключение

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

Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/uClmFkHTpr8/lessons.php

Читать комменты и комментировать

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



Защитный код
Обновить

Введение в использование файла .htaccess | | 2012-06-19 12:00:08 | | Статьи Web-мастеру | | Файл .htaccess используется для конфигурации сервера Apache, впрочем, и для нескольких других серверов тоже. Не смотря на странное расширение, он является простым текстовым файлом, который можно | РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
 
Поделиться с друзьями: