В этой статье мы рассмотрим основные принципы использования файла .htaccess, который имеет важное значение для улучшения SEO. Этот файл позволяет гарантировать правильную индексацию страниц поисковыми системами. Мы изучим, как управлять перенаправлениями, настраивать безопасность и повышать производительность. Также мы предоставим советы по тому, как самостоятельно настроить этот файл.
Для чего нужен .htaccess
Файл .htaccess - это своего рода "пульт управления" для веб-разработчиков, используемый на серверах Apache. Он предоставляет удобные инструменты для настройки различных параметров и управления поведением веб-сайта. Когда нет прямого доступа к основным конфигурационным файлам сервера (как это бывает на виртуальном хостинге, например), .htaccess становится полезным инструментом для внесения нужных изменений.
Htaccess часто находится в основной папке вашего сайта или в тех папках, где нужна специальная настройка. Например, если вы используете WordPress, настройку можно сделать через плагин Yoast SEO, о котором мы говорили в статье Настройка robots.txt. В других случаях, достаточно зайти в нужную папку и отредактировать существующий файл .htaccess, или создать его, если он еще не создан.
Настройка файла .htaccess
301 редирект htaccess
301 редирект в файле .htaccess можно сравнить с постоянным перенаправлением на веб-сайте. Он сообщает поисковым системам и браузерам, что страница теперь находится по новому адресу навсегда, и предлагает обновить закладки и индексацию. Обычно такое перенаправление применяется, когда страница перемещается или удаляется, чтобы сохранить её рейтинг в поисковых результатах и перенаправить посетителей на новое место.
Для активации редиректов необходимо включить соответствующую команду в файле .htaccess:
RewriteEngine on
После чего можно настроить самый простой способ перенаправления:
<IfModule mod_rewrite.c>
RewriteEngine On
Redirect 301 /old-page.html /new-page.html
</IfModule>
Похожим образом выглядит редирект с использованием директивы RedirectPermanent:
<IfModule mod_rewrite.c>
RewriteEngine On
Redirect permanent /old-page.html http://new-domain.ru/new-page.html
</IfModule>
Это были самые легкие в настройке методы редиректов. Давайте рассмотрим конфигурацию, в которой используются другие, более продвинутые, виды перенаправлений с использованием модуля mod_rewrite:
<IfModule mod_rewrite.c>
RewriteEngine On
# Перенаправление с одной страницы на другую
RewriteRule ^old-page.html$ http://www.example.com/new-page.html [R=301,L]
# Перенаправление всего трафика с одного домена на другой
RewriteCond %{HTTP_HOST} ^oldsite.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.oldsite.com$
RewriteRule ^(.*)$ http://www.newsite.com/\ [R=301,L]
# Перенаправление с www на без www (или наоборот)
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule ^(.*)$ http://example.com/\ [R=301,L]
# Перенаправление с HTTP на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/\ [R=301,L]
# Перенаправление с одного поддомена на другой
RewriteCond %{HTTP_HOST} ^subdomain1.example.com$
RewriteRule ^(.*)$ http://subdomain2.example.com/\ [R=301,L]
</IfModule>
Гораздо реже можно встретить 302 редирект .htaccess. Он говорит о том, что перемещение временное, и ресурс может вернуться на прежнее место в будущем. Вот пример такой настройки:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^old-page.html$ /new-page.html [R=302,L]
</IfModule>
Директива ErrorDocument
Эта настройка позволяет вам контролировать то, что пользователь видит, когда на вашем сайте возникают ошибки HTTP. Вместо стандартного сообщения об ошибке вы можете показать собственную страницу, которая будет более информативной для посетителя и поможет ему разобраться в произошедшем. Просто следуйте этому синтаксису для использования:
ErrorDocument <код_ошибки> <URL_страницы>
Например,
ErrorDocument 404 /errors/not_found.html
Означает, что при возникновении ошибки 404, будет открыта страница по пути /errors/not_found.html. Аналогично указываются абсолютные URL:
ErrorDocument 500 http://example.com/errors/server_error.html
Данный пример указывает на отображение страницы server_error.html по адресу http://example.com/errors/ при возникновении ошибки 500.
Запрет доступа к директории сайта
В файле .htaccess есть команда Deny from all, которая помогает запретить доступ к определенным папкам или файлам на вашем веб-сервере. Это может быть полезно, если вы хотите скрыть частную информацию или важные файлы от посетителей сайта, чтобы обеспечить безопасность данных.
Для отключения листинга (просмотра всех доступных каталогов) необходимо добавить строку:
Options -Indexes
Пример для блокировки доступа к определенной директории выглядит следующим образом:
<Directory /путь_к_вашей_директории>
Order Deny,Allow
Deny from all
</Directory>
Аналогично можно запретить доступ к одному файлу:
<Files "file.php">
Order Deny,Allow
Deny from all
</Files>
Или для целого ряда файлов по расширению:
<FilesMatch "\.(txt|log|bak)$"> # Выбираем нужные расширения, в примере используются: txt, log, bak
Order Deny,Allow
Deny from all
</FilesMatch>
Блокировка доступа пользователей по IP
Блокировка доступа по IP в файле .htaccess - это метод, который позволяет вам ограничить доступ к вашему веб-сайту для конкретных IP-адресов или их групп. Это может быть полезным, если вы хотите предотвратить доступ к вашему сайту или его определенным частям для определенных людей или нежелательных ботов.
Блокировка одиночного IP-адреса производится командой:
Order Deny,Allow
Allow from all
Deny from 11.22.33.44
По аналогии производится блокировка нескольких IP-адресов. Достаточно дублировать строку «Deny from», указывая нужные адреса.
Для блокировки диапазона IP-адресов:
Order Deny,Allow
Allow from all
Deny from 11.11.11.11/24
Чтобы открыть доступ только для конкретных IP, необходимо добавить код:
Order Deny,Allow
Deny from all
Allow from 11.22.33.44
Для полного запрета доступа можно использовать директиву Deny from all, а для блокировки адресов по маске указать Deny from 11.22.
Где, 11.22 – это маска IP-адреса.
Блокировка посетителей по User-Agent
Блокировка пользователей по User-Agent в файле .htaccess - это метод управления тем, кто может получить доступ к вашему веб-серверу, опираясь на информацию о том, какой браузер использует посетитель. User-Agent строка содержит данные о браузере, который человек использует для взаимодействия с вашим сервером, и благодаря этой информации вы можете ограничивать доступ определенных пользователей.
Наиболее частый способ такой блокировки – это использование mod_rewrite:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^Bot1 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot2 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot3 [NC]
RewriteRule ^.*$ - [F,L]
</IfModule>
В данном примере:
- RewriteCond %{HTTP_USER_AGENT} используется для проверки User-Agent строки.
- ^Bot1, ^Bot2, ^Bot3 - это примеры User-Agent строк, которые мы хотим заблокировать. Модификаторы NC указывают на то, что сравнение должно быть независимым от регистра (без учета регистра).
- RewriteRule ^.*$ - [F,L] применяется к запросу, если любое из условий RewriteCond выполняется. Он отправляет ответ с кодом состояния 403 Forbidden (F) и прекращает обработку правил (L).
Кэширование в htaccess
Настройка кэширования через файл .htaccess помогает ускорить ваш сайт, делая его загрузку быстрее для пользователей. Она работает так: определенные файлы, например, изображения, стили CSS и скрипты JavaScript, сохраняются в кэше браузера пользователя после первой загрузки. Теперь браузер может использовать эти файлы из кэша, вместо того чтобы снова загружать их с сервера каждый раз, когда пользователь заходит на страницу. Это снижает время загрузки и улучшает производительность сайта.
Рассмотрим пример:
# Включение кэширования для изображений на 1 месяц
<FilesMatch "\.(jpg|jpeg|png|gif|svg)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
# Включение кэширования для CSS и JavaScript на 1 неделю
<FilesMatch "\.(css|js)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
Для тех ресурсов, которые часто обновляются, наоборот, необходимо отключить кэширование:
# Исключение кэширования для HTML страниц и XML файлов
<FilesMatch "\.(html|xml)$">
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>
Оптимизация работы сайта
Модули mod_deflate и mod_gzip в Apache помогают сжимать информацию, которую сервер отправляет на устройства пользователей. Это делает файлы меньше по размеру, что в свою очередь ускоряет загрузку страниц. Но стоит помнить, что поддержка и настройка этих модулей могут различаться в зависимости от вашего сервера.
Пример использования модуля mod_deflate:
<IfModule mod_deflate.c>
# Сжатие текстовых типов файлов
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
Пример для mod_gzip:
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ # Включение сжатия для файлов с расширениями .html, .txt, .css, .js, .php, .pl
mod_gzip_item_include mime ^application/x-javascript.* # Включение сжатия для MIME-типов, начинающихся с application/x-javascript
mod_gzip_item_include mime ^text/.* # Включение сжатия для MIME-типов, начинающихся с text/
mod_gzip_item_exclude mime ^image/.* # Исключение из сжатия MIME-типов, начинающихся с image/
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* # Исключение уже сжатых данных (ответов с заголовком Content-Encoding: gzip)
</IfModule>
Мы поговорили о наиболее используемых директориях. Ознакомиться со всеми возможностями файла можно в официальной документации.
Как проверить работу файла .htaccess
Чтобы проверить, работает ли ваш файл .htaccess на сайте, вы можете выполнить следующие шаги:
- Намеренно изменить файл .htaccess с ошибкой. В ответ сервер должен выдать ошибку. Этот способ показывает применяется ли работа файла в целом на сервере.
- Проверить работу конкретных изменений, которые вы внесли. Например, внести небольшую корректировку в один из параметров и оценить наличие изменений.
- Проверить код состояния страницы, если изменения связаны с ответом сервера. Как это сделать, мы ранее описывали в статье Коды ошибок HTTP: полный список ошибок сервера.
- Обратиться к журналам сервера (логам). В них отображаются все ошибки, связанные с работой файла .htaccess
- Провести тестирование при помощи онлайн-сервисов или инструментов.
Важно понимать, что для проверки функциональности файла .htaccess не требуется выполнять все шаги сразу. Достаточно выбрать из списка наиболее подходящий метод и воспользоваться им.
Заключение
Настройка файла .htaccess - это важный шаг для оптимизации и защиты вашего сервера Apache. Мы изучили, как этот файл помогает управлять перенаправлениями, сжимать содержимое и обеспечивать безопасность. Когда вы освоите работу с .htaccess, вы получите мощный инструмент для улучшения производительности и функциональности веб-сайтов.