Введение в использование файла .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
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Чтобы вырастить плодоносящий сайт - его полезно регулярно поливать и удобрять с помощью рекламы и оптимизации Компания "RedLine" |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.