19 настроек .htaccess, в том числе и 301 редирект

Оптимизаторы используют файл .htaccess, чтобы корректно настроить 301 редирект. На самом деле этот файл может сделать гораздо больше для корректной работы вашего сайта – улучшить безопасность и параметры отображения.

Название происходит от англ. hypertext access (доступ к гипертексту). Благодаря .htaccess можно менять настройки наиболее популярного типа веб-серверов Apache или аналогичных. Далее вы можете ознакомиться с применением файла для других целей и увидеть примеры кода.

Table of Contents

Базовые возможности .htaccess

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

Благодаря .htaccess можно оптимизировать сайт:

Ищем и редактируем .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. Последовательность переадресаций должна быть от частной до глобальной. Скажем, редирект со страницы 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.

Subscribe

Subscribe