Оптимизаторы используют файл .htaccess, чтобы корректно настроить 301 редирект. На самом деле этот файл может сделать гораздо больше для корректной работы вашего сайта – улучшить безопасность и параметры отображения.
Название происходит от англ. hypertext access (доступ к гипертексту). Благодаря .htaccess можно менять настройки наиболее популярного типа веб-серверов Apache или аналогичных. Далее вы можете ознакомиться с применением файла для других целей и увидеть примеры кода.
Базовые возможности .htaccess
Файл позволяет оптимизатору более гибко настроить сервер. Не советуем задавать в .htaccess правила, если вы можете работать с главным конфигурационным файлом сервера .httpd.conf либо apache.conf. Эти 2 файла не дают запросам перегружать сервер и быстрее их применяют. Но во многих случаях оптимизатор не имеет доступа к указанным файлам, скажем, на виртуальном хостинге. В таком случае необходимые настройки прописываются через .htaccess.
Благодаря .htaccess можно оптимизировать сайт:
- настраивая редиректы для SEO;
- обеспечивая безопасность сайта;
- настраивая корректное отображение ресурса;
- оптимизируя скорость загрузки.
Ищем и редактируем .htaccess
Находясь в корневой директории, команды .htaccess будут распространяться на весь ресурс. Но если разместить файл в любом другом каталоге, то он будет «командовать» только этой папкой. То есть вполне допустимо более одного .htaccess на сайте. Более приоритетным считается файл в каталоге, не из корневой папки.
Файл .htaccess можно переименовать. Создание и редактирование доступно из любого текстового редактора. В некоторых CMS работать с файлом можно через админпанель. Для Битрикса поиск тоже прост – «Контент», далее «Файлы и папки».
Для WordPress’а редактирование возможно благодаря модулям плагинов All in One SEO Pack и Yoast SEO.
В случае отсутствия .htaccess следует создать его через текстовый редактор и разместить в корневом каталоге сайта или любом другом.
Синтаксис файлов
Он несложный: новые команды следует начинать с новой строки. Символ # позволяет писать комментарий, не учитываемый сервером. Для применения новых команд не нужно перезагружать сервер.
Также можно использовать регулярные выражения для правил. Для этого нужно понимание значений переменных и специальных символов.
Основные специальные символы:
- ^ – начало строки.
- $ – конец строки.
- . – любой символ.
- * – любое количество любых символов.
- ? – один конкретный символ.
- [4–8] – последовательность символов, к примеру, от 4 до 8.
- | – символ «или».
- () – выбор группы символов.
Основные переменные:
- %{HTTP_USER_AGENT} – поле User-Agent, полученное от браузера пользователя.
- %{REMOTE_ADDR} – IP-адрес юзера.
- %{REQUEST_URI} – запрашиваемый URI.
- %{QUERY_STRING} – параметры запроса после ?.
Если вам нужно больше информации, доступно полное руководство, а также отличный сайт на русском языке.
Настройка редиректов для SEO
Рекомендуем убедиться в необходимости настройки нужной вам переадресации. К примеру, некоторые CMS уже имеют настроенную по умолчанию переадресацию на странички со слэшем.
Применяйте 2 важных для редиректов правила:
- Не используйте несколько последовательных редиректов – это увеличит нагрузку на сервер и снизит скорость работы ресурса.
- Последовательность переадресаций должна быть от частной до глобальной. Скажем, редирект со страницы 1 на страницу 2, а потом общий на странички со слэшем. Это работает не всегда, нужно тестировать.
Настройка постраничных 301 редиректов
Необходимо для следующих случаев:
- смена структуры сайта с изменением уровня вложенности страницы;
- страницы уже нет, но необходимо перенаправить её трафик;
- смена URL.
Удаление страницы не очень эффективно. Рекомендуем не доходить до ошибки 404, а сделать редирект на другой URL. Это уменьшит риск потери сайтом позиций в поисковой выдаче. Настройка 301 переадресации со страницы 1 на страницу 2 возможна с помощью директивы простого перенаправления:
Redirect 301 /page1/ https://mysite.com/page2/
- /page1/ – адрес страницы от корневой папки, без домена и протокола. Пример: /catalog/ofisnaya-mebel/kompjuternye-stoly/.
- https://mysite.com/page2/ – полный адрес страницы редиректа, включая протокол и домен. Пример: https://dom-mebeli.com/ofisnaya-mebel/stoly-v-ofis/.
Прочь дубли!
Чтобы у каждой страницы ресурса был только один адрес, необходимо настроить:
- перенаправление на странички, имеющие слэш на окончании URL либо наоборот;
- основное зеркало – адрес сайта в поисковых системах.
Реализация описанного возможна с помощью модуля mod_rewrite. В нем применяются спецкоманды – директивы сложного перенаправления. Первая команда – все активизация преобразования URL’а: RewriteEngine On.
Редирект на слэш или в другую сторону
Это решается отдельно для каждого случая. Если сайт накопил историю в поиске, проанализируйте количество проиндексированных страниц со слэшем и без. Если сайт новый, чаще всего делают слэш-переадресацию. Для проверки редиректа по умолчанию просто удаляют/добавляют слэш в окончании URL’а. Страница перегрузилась и имеет новый адрес – дубли есть, нужна коррекция. Смена URL’а – все ОК. Лучше проверить разную вложенность папок.
Код 301 переадресации на слэш:
RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
Код 301 переадресации на страницы, не имеющие слэша:
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L]
Настройка главного зеркала
Определите основной адрес для ПС. SSL-сертификат сегодня строго обязателен. После его установки добавьте инфу в .htaccess и robots.txt.
Переадресация на HTTPS
RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Чтобы определить наличие или отсутствие «www» у главного зеркала, практикуют разные способы:
- добавляют сайт в Яндекс.Вебмастер как два сайта – консоль покажет, какой из них считается главным зеркалом у поисковика;
- анализ выдачи и оценка количества проиндексированных страниц;
- в случае нового сайта наличие «www» неважно, тут решать вам.
Дальше применяем один из кодов.
Переадресация с www на сайт без него
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Переадресация с без www на сайт с ним
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\..* [NC] RewriteRule ^(.*) http://www.%{HTTP_HOST}/$1 [R=301]
Перенаправление с домена
Нужно для редиректа пользователей и роботов на другой адрес, если сайт переехал на новый домен. Некоторые серые оптимизаторы используют редирект с домена, чтобы манипулировать ссылочной массой (нам не интересно).
RewriteEngine On RewriteRule ^(.*)$ http://www.mysite2.com/$1 [R=301,L]
либо
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.mysite1\.ru$ [NC] RewriteRule ^(.*)$ http://www.mysite2.ru/$1 [R=301,L]
Улучшение безопасности сайта
У файла .htaccess большой потенциал в защите веб-ресурса от DDOS-атак, «плохих» скриптов или кражи контента. .htaccess может обеспечить защиту в доступе к другим файлам или разделам.
Запрет на копирование картинок
Недобросовестные вебмастера могут воровать ваш контент, в том числе изображения, прямо с хостинга через хотлинки. Это ненужная нагрузка на сервер и нарушение авторских прав.
Options +FollowSymlinks RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https://(www.)?mysite.com/ [nc] RewriteRule .*.(gif|jpg|png)$ https://mysite.com/img/goaway.gif[nc]
Создайте гифку с сообщением, что воровать чужие картинки плохо: https://mysite.com/img/goaway.gif. Гифка будет показана на другом сайте.
Запрет доступа
Боты и нежелательные гости с некоторых подсетей и IP-адресов могут идти лесом, если вы используете следующие директивы.
От ботов («плохих» User Agent)
SetEnvIfNoCase user-Agent ^FrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Java.* [NC,OR] SetEnvIfNoCase user-Agent ^Microsoft.URL [NC,OR] SetEnvIfNoCase user-Agent ^MSFrontPage [NC,OR] SetEnvIfNoCase user-Agent ^Offline.Explorer [NC,OR] SetEnvIfNoCase user-Agent ^[Ww]eb[Bb]andit [NC,OR] SetEnvIfNoCase user-Agent ^Zeus [NC] <limit get=”” post=”” head=””> Order Allow,Deny Allow from all Deny from env=bad_bot </limit>
Список «плохих» пользователей легко редактируется. На этом ресурсе можно ознакомиться с хорошими и плохими ботами.
Если вас интересует запрет для роботов из поиска, используйте следующий код:
RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [F]
Для всех ботов, за исключением конкретных IP
ErrorDocument 403 https://mysite.com Order deny,allow Deny from all Allow from IP1 Allow from IP2 и т. д.
Для указанных IP
allow from all deny from IP1 deny from IP2 и т. д.
Подсеть
allow from all deny from 192.168.0.0/24
IP-адреса спамеров определяются логами сервера либо сервисами статистики. В админке WordPress видны IP-адреса тех, кто оставляет комментарии.
К конкретному файлу
<files myfile.html> order allow,deny deny from all </files>
Пользователь увидит ошибку 403 – «доступ запрещен».
Советуем сделать ограничение доступа к самому файлу .htaccess, а настроив все правила, поставьте на него права доступа 444.
<Files .htaccess> order allow,deny deny from all </Files>
Для ресурсов на WordPress стоит наложить ограничения доступа к wp-config.php, содержащему информацию о базе данных:
<files wp-config.php> order allow,deny deny from all </files>
Для пользователей, которые пришли с конкретного сайта
Можно заблочить юзеров с нежелательного ресурса (порноконтент и др.).
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR] RewriteCond %{HTTP_REFERER} bad-site.com [NC,OR] RewriteRule .* - [F] </ifModule>
Защита доступа к конкретной папке или файлу
Сперва нужно создать файл .htpasswd, прописав логины и пароли user:password и разместив файл в корне вашего ресурса. Советуем применить шифрование для паролей с помощью специализированных сервисов – пример. Далее следует добавить папки либо файлы в .htaccess:
Защита файла паролем:
<files secure.php=””> AuthType Basic AuthName “” AuthUserFile /pub/home/.htpasswd Require valid-user </files>
Защита папки паролем:
resides AuthType basic AuthName “This directory is protected” AuthUserFile /pub/home/.htpasswd AuthGroupFile /dev/null Require valid-user
Запрет на активацию «плохих» скриптов
Следующие команды защищают сайт от так называемых «скриптовых инъекций» – инструмента хакеров:
Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L]
Результат – перенаправление на ошибку 403 «Доступ запрещен».
Защита сайта от DDOS-атаки
Хороший вариант – ограничение максимально допустимого размера запроса. По умолчанию такого ограничения нет. Нужно прописать в .htaccess величину загружаемых файлов в байтах:
LimitRequestBody 10240000
Здесь размер равен 10 Мбайтам. Если нужно запретить загружать файлы вообще, пропишите число менее 1 Мбайта (1048576 байт). Либо используйте директивы LimitRequestFields, LimitRequestFieldSize и LimitRequestLine из официального руководства.
Настройка отображения сайта
Замена индексного файла
Индексным называют файл, который будет открываться по умолчанию, если пользователь обратился к определенной папке. Часто их называют index.htm, index.html, index.php, index.shtml, index.phtml, default.html, default.htm.
Для замены такого файла размещаем в папке .htaccess и добавляем следующую команду:
DirectoryIndex hello.html
Можно указать несколько файлов, которые будут открыты последовательно, если первый окажется недоступен:
DirectoryIndex hello.html hello.php hello.pl
Сохраняем или убираем html в окончании URL’а
Каждый оптимизатор сам решает, какой вариант лучше. Точных данных о ранжировании из-за html в URL пока нет.
Добавляем .html:
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?) RewriteRule .* %1.html [R=301,L] RewriteRule ^(.*)/$ /$1.html [R=301,L]
Убираем .html:
RewriteBase / RewriteRule (.*)\.html$ $1 [R=301,L]
Аналогично для php.
Настройка кодировки
Кодировка используется, чтобы избежать ошибок при отображении сайта браузером. Наиболее часто используемые:
- UTF-8 – универсальная.
- Windows-1251 – кириллица.
- Windows-1250 – для Центральной Европы.
- Windows-1252 – для Западной Европы.
- KOI8-R – кириллица (КОИ8-Р).
Первые две применяются чаще всего.
Кодировку указывают либо в метатэге каждой странички, либо задают с помощью .htaccess.
Для UTF-8:
AddDefaultCharset UTF-8
Для Windows-1251:
CharsetSourceEnc WINDOWS-1251
Примеры показывают разные кодировки, но для одного сайта кодировки в этих командах должны совпадать.
Создание кастомных страниц ошибок
Используя правила, в .htaccess легко настраивается отображение страниц, специально созданных для наиболее популярных ошибок. Примеры:
ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php
Перед прописыванием директив следует создать в корне веб-сайта папку error и разместить в ней соответствующие файлы для каждой страницы ошибки. Это необходимо, чтобы пользователь не потерялся на странице 404, а получил возможность перейти в другой раздел ресурса.
Оптимизация работы сайта
Скорость загрузки вашего ресурса – важный фактор ранжирования в поисковиках. Директив в .htaccess помогут её увеличить.
Сжатие компонентов сайта модулями mod_gzip либо mod_deflate
Сжимая файлы, мы увеличиваем скорость загрузки ресурса, но и больше нагружаем сервер. Оба модуля сжимают практически одинаково.
Gzip считается модулем с более гибким синтаксисом, также умеет использовать маски:
<ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </ifModule>
В mod_deflate нужно перечислить типы файлов для сжатия:
<ifModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript </ifModule>
Усиление кэширования
Следующие команды увеличат скорость загрузки сайта для пользователей, уже посещавших его. Картинки и скрипты будут взяты браузером из кэша.
FileETag MTime Size <ifmodule mod_expires.c> <filesmatch “.(jpg|gif|png|css|js)$”> ExpiresActive on ExpiresDefault “access plus 1 week” </filesmatch> </ifmodule>
Можно задать срок жизни кэша – hours, month, year и др.
Или так:
<IfModule mod_expires.c> ExpiresActive On ExpiresByType application/javascript "access plus 7 days" ExpiresByType text/javascript "access plus 7 days" ExpiresByType text/css "access plus 7 days" ExpiresByType image/gif "access plus 7 days" ExpiresByType image/jpeg "access plus 7 days" ExpiresByType image/png "access plus 7 days" </IfModule>
Другие возможности
Настройки php
Выполняются программистами в случае отсутствия доступа к php.ini. Нас интересуют выражения php_value, отвечающие за объем данных, загружаемых на сайт, и время обработки скриптов, поскольку это влияет на производительность.
<ifModule mod_php.c> php_value upload_max_filesize 125M php_value post_max_size 20M php_value max_execution_time 60 </ifModule>
«post_max_size» – максимальный объем постинга, «max_execution_time» – время в секундах для обработки скриптов.
Борьба со спам-комментами на WordPress
Для закрытия доступа спамерам к wp-comments-post.php следует добавить следующие команды в .htaccess:
RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*mysite.com.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Установка e-mail для админа сервера
Следующий код в .htaccess определит электронку админа по умолчанию.
ServerSignature EMail SetEnv SERVER_ADMIN [email protected]
Предупреждение о недоступности ресурса
Если возникла ситуация недоступности сайта в связи с техническими причинами, хорошим решением является перенаправление посетителей на страницу, где будет отражена информация о восстановлении работы.
RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^12\.345\.678\.90 RewriteRule $ https://mysite.ru/info.html [R=302,L]
Общие принципы работы с .htaccess
- Перед тем, как внести изменения, сохраняйте копию файла для возможного «отката».
- Делайте изменения поэтапно, добавляя по одному правилу. Далее оцените результат и переходите к следующему этапу.
- Размещая несколько файлов .htaccess в разных папках, следует прописать в дочерних только новые команды, актуальные для конкретной папки. Остальные будут унаследованы от родительской папки либо файла в корневом каталоге.
- Чистите кэш браузера.
- При возникновении ошибки 500 следует проверить синтаксис правила на опечатку. Можно использовать сервисы проверки .htaccess в сети, скажем, этот. Нет ошибок – скорее всего, такая команда запрещена в главном файле конфигурации. Нужна консультация программиста и хостинг-провайдера.
- В командах .htaccess символы кириллицы недопустимы. При указании адреса домена на кириллице (вашсайт.рф) используйте любой whois-сервис, чтобы определить название по методу punycode.
- Если директив в .htaccess слишком много, это снизит работоспособность ресурса. Применяйте изменения файла исключительно при отсутствии других путей решения задачи.
- Мало времени на изучение особенностей директив – примените генератор .htaccess.