Введение в использование файла .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-04-22 » Комментирование кода и генерация документации в PHP
- 2024-04-22 » SEO в России и на Западе: в чем основные отличия
- 2024-04-22 » SEO для международного масштабирования
- 2024-04-22 » Как использовать XML-карты для продвижения сайта
- 2024-04-22 » Цифровой маркетинг: инструменты для продвижения и рекламы в 2024 году
- 2024-04-22 » Что такое CSS-модули и зачем они нам?
- 2024-04-17 » 23 сервиса для эффективного экспресс-аудита любого сайта
- 2024-04-08 » Яндекс переходит на новую версию Wordstat
- 2024-04-08 » Яндекс интегрировал в свой облачный сервис эмпатичную нейросеть
- 2024-04-08 » Новая версия нейросети Claude превзошла по мощности аналоги Google и OpenAI
- 2024-04-08 » Как пользоваться GPT 4 и Claude бесплатно и без VPN
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
Не бойся быть ни как все и все захотят быть как ты! |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.