Оптимизация сайта - Hacker Promotion

Перейти к контенту

Оптимизация сайта

> Разработка сайта

Правильные популярные настройки 301 редиректа в файле .htaccess

Советы по добавлению редиректов.


Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы - вес исходной страницы может не передаться.
При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.
Наиболее популярные правила
Приведенные примеры работают для серверов функционирующих на APACHE, для NGINX настройки в файле .htaccess работать не будут. В примерах используется %{QUERY} - так обозначается часть URL, которая следует после знака вопроса. Правила для редиректа срабатывают только при условии соответствия правилу указанному в редиректе.

При настройке правила редиректов в файле .htaccess все правила необходимо указывать после указанных двух строк, либо просто добавьте их:

Options +FollowSymLinks

RewriteEngine On
301 редирект все страниц без WWW на страницы с WWW
RewriteCond %{HTTP_HOST} ^mysite\.ru$ [NC]

RewriteRule ^(.*)$ http://www.mysite.ru/$1 [R=301,L]
Обратный редирект со страниц с WWW на страницы без WWW
RewriteCond %{HTTP_HOST} ^www.mysite\.ru$ [NC]

RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
301 редирект с одной страницы на другую
Redirect 301 /oldpage.html http://mysite.ru/newpage.html
Переадресация для разделов через RewriteRule
RewriteRule ^papka /papka-new/$1 [R=301,L]
301 редирект для страниц имеющих Get-параметры в URL
Для наглядности примера допустим адрес страницы имеет вид http://mysite.ru/catalog/index.php?IBLOCK_ID=5&SECTION_ID=15. Следующее правило будет делать переадресацию:

RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC]

RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]
Иногда необходимо настроить редирект для изменяющихся Get-параметров, например в текущем примере динамическим параметром будет SECTION_ID:

RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=(.*)$ [NC]

RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]
Переадресация со страниц без значения Get-параметра
Например адрес страницы имеет вид - http://mysite.ru/?addon, тогда редирект будет следующим:

RewriteCond %{QUERY} ^addon$ [NC]

RewriteRule ^$ /? [R=301,L]
Переадресация одного адреса, без вложенных адресов
Например довольно часто необходимо настроить переадресацию со страницы раздела http:/site.ru/razdel/, однако прочие страницы в данном разделе должны работать без редиректа, например страница http://mysite.ru/razdel/section.php?SECTION_ID=1. Для этого нужно добавить всего один символ - $.

RewriteRule ^razdel/$ http://mysite.ru/new-razdel/ [R=301,L]
Настройка кириллических доменов .РФ
Правила и логика работы с доменами на кириллице абсолютно такие же, единственным отличием является замена символов кириллицы на специальный код.

301 редирект с одного домена на другой
RewriteCond %{HTTP_HOST} ^oldmysite\.ru$ [NC]

RewriteRule ^(.*)$ http://newmysite.ru/$1 [R=301,L]
Правило для доменов .РФ

RewriteCond %{HTTP_HOST} ^xn-...\.xn--p1ai$ [NC]
RewriteRule ^(.*)$ http://mysite.ru/$1 [R=301,L]
Редирект на папки со слешем на конце
RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..{1,10}$

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*)$ http://mysite.ru/$1/ [L,R=301]
Редирект на папку без слеша - убираем слеш на конце
RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^(.+)/$

RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
Переадресация с домена в папку другого сайта
RewriteCond %{HTTP_HOST} ^oldsite\.ru$ [NC]

RewriteRule ^(.*)$ http://newsite.ru/oldsite/ [R=301,L]
Редирект со всех страниц кроме определенной папки
Для примера возьмем в исключение папку панели администратора в CMS Bitrix

RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]

RewriteRule ^(.*)$ http://mysite.ru/ [L,R=301]
Переадресация всех файлов папки на конкретный файл
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Переадресация файлов папки на другой файл с исключением
RewriteRule ^papka/file.html /new-file.html [L,R=301]

RewriteRule ^papka(.*)$ /my-file.html [L,R=301]
Редирект замены расширений файлов - с html на php
RedirectMatch 301 (.*)\.html$ http://newsite.ru$1.php
Указываем порядок загрузки индексных файлов в корне
DirectoryIndex index.php index.html index.htm index.shtml
Редирект с index.php на корень сайта
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://mysite.ru/ [R=301,L]
Редирект всех индексных страниц на корень
RewriteRule ^(.*)index\.php$ http://mysite.ru/$1 [R=301,L]
Переадресация с поддомена на основной домен
RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ [NC]

RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI} [R=301,NC,L,QSA]
Редирект страницы из различных директорий
Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.

RewriteRule [^abc]/nash-file.php /nash-file.php [R=301,L]
Создаем ЧПУ-копию динамических страниц
Для страницы появится обычный URL без передачи Get-параметров.

RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123 [NC,L]
Переадресация с https на http
Необходимое правило для решения проблемы с дублями страниц в поисковых системах.

RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
Настройка ответа 403 для спама по REFERER
Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:

RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR]

RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]

RewriteRule .* - [F]
Обработка ошибки 404 в .htaccess
Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц

ErrorDocument 404 /404-for-me.php
Особенности настройки
Следует помнить, что все правила выполняются в .htaccess в порядке следования их в файле, поэтому необходимо следить за очередностью правил.

Избегайте цепочек редиректов, когда от старой до новой страницы осуществляется посещение еще одной страницы. Цепочки переадресаций негативно влияют на доверие пользователей и поисковых систем.

Включение редиректа для определенных User Agent
Например редирект на мобильную версию для планшетов и смартфонов:

RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]  

RewriteRule (.*) http://m.mysite.ru/ [L,R=301]
Настройка редиректов для всех поисковых роботов
RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC]

RewriteRule (.*) http://no-rank-site.ru/ [L,R=301]
Синтаксис и символы
. — Точка означает любой символ.
[abc] — перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
* — предыдущий символ может повторяться 0 и более раз.
[abc]* — найти символы из заданного набора идущие подряд.
[^abc]* — обратная операция.
.* — замена любого набора символов. ".*" — найти все подстроки между кавычками.
^ — обознает начало строки (при использовании в начале выражения).
$ — конец строки.
\w — буква, цифра или подчёркивание _.
\d — любая цифра.
\D — любой символ, кроме цифр.
[0-9] — указание на любую цифру.
[a-z] — указание на любую букву от a до z с нижним регистром.
[A-Z] — указание на любую букву от A до Z с верхним регистром.
[a-zA-Z] — любая буква от a до Z, регистр не важен.
[a-Z] — тоже самое, только короче.
Флаги для доп. опций
NC — NoCase отключает проверку регистра символов при срабатывании правила.
R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
L — Last останавливает создание URL-адреса и строка считается окончательной.
Назад к содержимому