- Как сделать редирект. Все виды.
- Как сделать 301 редирект в .htaccess
- Что внутри
- Какие бывают редиректы
- 301 редирект: для постоянного перенаправления
- 302 редирект: для временного перенаправления
- 302 редирект + время = 301 редирект
- Способы настройки редиректа
- В файле с настройками веб-сервера
- В файле с настройками PHP
- При помощи HTML
- При помощи JavaScript
- Google не любит HTML и JavaScript редиректы
- Примеры редиректов
- 301 редирект с одной страницы на другую
- 301 редирект с одного домена на другой
- 301 редирект на папку другого домена
- 301 редирект с HTTP на HTTPS
- 301 редирект с WWW на без WWW
- 301 редирект с без слеша на слэш
- 301 редирект на URL без расширения
- 301 редирект с верхнего регистра на нижний
- 301 редирект для нового формата перманентных ссылок на сайте с WordPress
- Когда лучше не использовать редиректы
- Как не стоит настраивать редиректы
- Синтаксис для редиректов в .htaccess
- Переменные
- Условия
- Символы
- Флаги
Как сделать редирект. Все виды.
Есть несколько типов редиректов, рассмотрите каждый из них в кратце, чтобы определить какой из них вам больше подходит.
Редирект через htaccess — самый популярный, и довольно простой способ. Чтобы его сделать, вам понадобится создать в папке сайта файл с названием .htaccess (обратите внимание, что название файла начинается с точки, это не опечатка). Если вы используете CMS WordPress или Joomla, то скорее всего этот файл у вас уже есть, в этом случае вам нужно будет просто отредактировать его.
Читайте ниже чтобы узнать какие именно инструкции в нем нужно прописать, чтобы создать перенаправление.
Редирект при помощи PHP — подойдет в том случае, если вы разбираетесь в PHP и знаете структуру своего сайта. Этот вариант подойдет вам, если ваш сайт написан не на CMS. В ином случае лучше используйте редирект через htaccess.
Редирект HTML — если у вас простой HTML сайт и вам нужно сделать перенаправление для одной страницы — это самый простой вариант. Сделать перенаправление для всего сайта этим способом будет трудозатратно, особенно если у вас на сайте больше 10 страниц.
Редирект при помощи JavaScript — этот способ подойдет также в том случае, если у вас простой сайт, либо если нужно сделать редирект для одной — двух страниц, либо для всего сайта в целом.
Инструкции, которые вы увидите ниже, нужно прописать в файл .htaccess в самое начало.
- Редирект всего сайта (всех страниц) на другой сайт
Пропишите эту строку в .htaccess файле, и тогда все посетители вошедшие на сайт по протоколу HTTP будут перенаправляться на защищенный протокол HTTPS.
Если вы прописываете редирект для WordPress, то обратите внимание на то, что в файле уже есть строка RewriteEngine On. Поэтому сразу под ней вам нужно добавить такие строки
В PHP редирект делается так: сервер отправляет заголовки headers браузеру посетителя, и тот переходит по нужному адресу автоматически.
Стоит отметить важный момент, отправлять заголовки можно только до вывода другой информации. То есть они должны отправляться до вывода любой другой информации через echo и до отправки кук.
- Редирект на другой сайт
Чтобы сделать редирект через HTML, нужно добавить на каждую страницу где он планируется специальный мета тег. Мета тег прописывается внутри тега .
На больших сайтах этот метод не удобен, и рекомендуется использовать редирект через htaccess.
- Редирект на другой сайт
Этот вид перенаправления удобен тем, что его код можно прописать в одном файле (в отличие от html метода), и этот файл вставить на каждой странице прописав
- Редирект на другой сайт
Источник
Как сделать 301 редирект в .htaccess
Редирект используют, чтобы перенаправить посетителей с одной страницы на другую. Ситуаций, когда это может понадобиться, очень много. Например, нужно перенести сайт на другой домен, настроить переадресацию с HTTP на HTTPS или отправить человека на новый вариант страницы.
В этой статье рассмотрим подобные ситуации подробнее и расскажем, как сделать редирект в каждой из них. Также вы узнаете, какие бывают редиректы и чем они отличаются друг от друга.
Что внутри
Какие бывают редиректы
Есть два основных вида редиректа: 301 Moved Permanently и 302 Moved Temporarily или 302 Found. Вообще, их больше, но в жизни вам понадобятся только эти.
Для людей разницы между видами редиректа нет, результат будет один и тот же. Но для поисковиков Moved Permanently и Moved Temporarily — разные вещи. В зависимости от того, какой редирект вы используете — 301 или 302 — поисковики по-разному воспримут цель перенаправления. В итоге ссылочный вес страницы, для которой настроили редирект, либо сохранится, либо перейдёт новой странице.
О других редиректах читайте в статье: Коды состояния HTTP.
301 редирект: для постоянного перенаправления
Код 301 Moved Permanently означает, что от старой страницы вы решили отказаться и создали новую, более актуальную. Для ботов поисковых систем 301 редирект будет сигналом больше не индексировать старую страницу и удалить её из результатов поиска. При этом ссылочный вес старой страницы перейдёт на новую.
Редирект 301 используют, когда нужно:
- перенести сайт на другой домен;
- перенести страницу на новый адрес;
- настроить перенаправление с HTTP на HTTPS;
- настроить перенаправление с WWW на без WWW;
- стандартизировать внешний вид URL-адресов;
- отправить пользователя на более актуальную страницу, которую вы создали вместо старой;
- сделать так, чтобы на сайт можно было зайти по нескольким доменным именам;
- убрать дубликаты страниц.
302 редирект: для временного перенаправления
Код 302 Moved Temporarily в HTTP 1.0 или 302 Found в HTTP 1.1 означает, что старая страница ещё понадобится, но посетителям нужно временно показывать другую. Для ботов поисковых систем такой редирект будет сигналом продолжить индексировать старую страницу и оставить её в результатах поиска. При этом ссылочный вес старой страницы сохранится.
Редирект 302 используют, когда нужно:
- скрыть исходную страницу на время, пока вы её переделываете;
- перенаправить посетителей на дубликат страницы с временным предложением;
- перенаправить посетителей на страницу, содержимое которой отличается от исходной;
- провести A/B тестирование нового варианта страницы, не потеряв при этом позиции старой.
302 редирект + время = 301 редирект
По словам главного аналитика Google, если долго не убирать 302 редирект, он начнёт передавать ссылочный вес, как это делает 301 редирект. Google решит, что временный редирект настроили случайно и станет воспринимать его как постоянный.
Способы настройки редиректа
Есть четыре способа настроить редирект: в файле с настройками веб-сервера, в файле с настройками PHP, при помощи HTML или JavaScript. Каждый способ подходит для разных целей. Разберём на примерах.
В файле с настройками веб-сервера
Самый популярный способ настройки. Чаще всего его используют, когда нужно сделать 301 редирект для всех страниц сайта сразу: с HTTP на HTTPS, с WWW на без WWW, со ссылки без косой черты на ссылку с косой чертой. Но для отдельных страниц он тоже подходит. В следующем разделе рассмотрим конкретные ситуации с примерами команд.
Настройки веб-сервера хранятся в специальном текстовом документе на хостинге. В зависимости от того, какой веб-сервер вы используете, путь к файлу, его название и сами команды для редиректа будут отличаться. Если у вас Apache, настройки будут в файле .htaccess, если Nginx — в файле nginx.conf.
В файле с настройками PHP
Такой способ настройки обычно используют, когда перед редиректом нужно проверить что-то в базе данных. Например, для редиректа на страницу с ошибкой 404 в дизайне вашего сайта. Человек вводит ссылку с опечаткой, PHP видит, что в базе данных страницы с таким URL нет, после чего перенаправляет человека на страницу ошибки.
Другой пример — человек вводит логин и пароль от аккаунта. Если детали входа правильные, происходит редирект со страницы входа на домашнюю страницу аккаунта. В .htaccess настроить такое не выйдет, потому что сервер не может ничего посмотреть в базе данных.
Смысла настраивать 301 редирект с HTTP на HTTPS в настройках PHP нет, поскольку работать такой редирект будет медленнее. Это связано с тем, что запрос на открытие страницы сначала обрабатывает веб-сервер, а только потом PHP.
При помощи HTML
Такой способ медленнее предыдущих, потому что перенаправление происходит только после загрузки страницы. Обычно HTML-редирект используют, когда хотят сначала показать человеку одну страницу, а потом автоматически перенаправить на другую.
Например, вы хотите, чтобы после оформления заказа клиент в течение пяти секунд видел страницу с благодарностью за покупку, а потом автоматически попадал на главную страницу или в личный кабинет.
При помощи JavaScript
Этот способ похож по принципу работы на предыдущий, но вместо HTML используют JavaScript. Перенаправление тоже происходит только после загрузки страницы. Правда, если человек отключил в браузере JavaScript, редирект не сработает.
Google не любит HTML и JavaScript редиректы
У них плохая репутация, потому что некоторые люди используют такие редиректы в недобросовестных целях. Например, делают страницы под одни запросы, выводят их на высокие места в поисковой выдаче, а потом настраивают перенаправление на страницу с другим контентом.
В большинстве случаев Google понимает, что на странице стоит отложенный редирект. Он может решить, что владелец сайта пытается обмануть посетителей, и убрать страницу из результатов поиска. Поэтому от подобных редиректов лучше по возможности отказаться.
Примеры редиректов
В этом разделе перечислим основные ситуации, в которых нужно настроить редирект, и дадим примеры правил для .htaccess. В некоторых случаях вам понадобится подставить свой домен вместо примера.
Перед тем как использовать правила из этого раздела, учтите несколько нюансов:
- Если у вас Nginx, команды будут отличаться. В этом случае просто скопируйте нужную команду и вставьте её в htaccess-конвертер для Nginx. Сервис переделает команду, и вам останется только вставить её в nginx.conf.
- Если у вас домен с кириллическими символами, его нужно сначала преобразовать в Punycode. Правила с символами не из латинского алфавита в .htaccess работать не будут.
- Во всех примерах используем редирект 301. Если вместо постоянного редиректа вам нужен временный, замените в тексте команды 301 на 302.
- Во всех примерах используем защищённый протокол. Если на вашем домене не стоит SSL-сертификат, замените в тексте команды HTTP на HTTPS.
301 редирект с одной страницы на другую
Такой редирект обычно настраивают, когда хотят сделать постраничный редирект с одного сайта на другой. Или когда на сайте появляется страница с дублирующим контентом. Например, у вас в блоге есть статья, которая хорошо ранжируется по некоторым запросам, но вы выпускаете вместо неё страницу с более красивым дизайном и актуальным контентом.
Старая статья после этого всё равно останется в результатах поиска. Две статьи на одну и ту же тему — не всегда хорошо. С одной стороны вы будете занимать две строчки в выдаче, но в реальности страницы могут забирать друг у друга трафик. В итоге позиции обеих статей могут даже снизиться.
Более выгодным решением будет настроить 301 редирект с одной страницы на другую. Если новая статья оптимизирована не хуже, она заберёт вес у старой, поднимется выше в выдаче и станет получать больше трафика.
Для настройки редиректа замените в тексте этого правила ссылки на адреса вашей страницы и добавьте его в .htaccess:
301 редирект с одного домена на другой
Такой редирект обычно настраивают, когда переносят сайт на новый домен или хотят, чтобы на один и тот же сайт можно было зайти с нескольких доменов. Для этого в .htaccess понадобится добавить такое правило:
Если переносите сайт на новый домен, одного 301 редиректа будет недостаточно. Подробный список действий вы найдёте у нас в блоге в статье о том, как сменить домен и не потерять позиции.
Если нужно сделать перенаправление с поддомена на домен, добавьте косую черту перед точкой, которая идёт после поддомена. Например, для редиректа с blog.domen.com на domen.com правило будет таким:
301 редирект на папку другого домена
Такой редирект может понадобиться, если вы решили перенести раздел с поддомена в подпапку. Например, сначала у вас был блог по адресу blog.domen.com, а теперь нужно перенести его на domen.com/blog. Тогда правило для редиректа будет таким:
Другой пример — консолидация двух доменов. Например, у вас есть магазин одежды odezhda.com, вы купили магазин обуви obuv.com и решили перенести его в папку на основном сайте — odezhda.com/obuv. В этом случае правило будет таким:
Если ситуация обратная и вам нужно настроить редирект с подпапки на домен, правило будет таким:
Где ^obuv$ — название подпапки.
301 редирект с HTTP на HTTPS
Когда вы только установили SSL-сертификат, попасть на защищенную версию сайта получится, только если специально дописать перед доменом https:// в адресной строке. Если просто ввести в браузере домен, сайт откроется по протоколу HTTP.
В этом случае нужно настроить 301 редирект с HTTP на HTTPS, чтобы защищённая версия сайта открывалась, даже если человек специально добавит http:// в браузере. Для этого добавьте в .htaccess такое правило:
301 редирект с WWW на без WWW
Обычно на одну и ту же страницу на сайте можно зайти по двум адресам: с www и без. Для поисковых систем это будут две разные страницы с одинаковым содержимым.
Чтобы не плодить дубликаты и не снижать уникальность контента, лучше выбрать какой-то один вариант написания ссылок и настроить на него 301 редирект со всех других вариантов.
Если сайт новый, основным может быть любой вариант написания, разницы нет. Если сайт уже набрал позиции, лучше выбрать тот вариант, у которого больше страниц в результатах поиска.
Это можно проверить двумя способами:
- загуглить по очереди обе версии домена с оператором “site” (site:domen.com и site:www.domen.com) и посчитать, у какого варианта больше результатов в выдаче;
- добавить обе версии сайта в Google Search Console и проверить количество страниц в индексе там. Этот вариант будет более точным.
Чтобы настроить редирект с WWW на без WWW, добавьте в .htaccess такой код:
Если вам наоборот нужно настроить редирект с без WWW на WWW, используйте такое правило:
301 редирект с без слеша на слэш
Так же как в примере с WWW и без WWW, на одну и ту же страницу обычно можно зайти по ссылке с косой чертой в конце и без неё. Для поисковых систем такие страницы тоже будут дубликатами.
Чтобы случайно не нарваться на санкции от поисковиков, будет правильно привести всё к одному варианту. Вот правило, которое добавит редирект 301 для ссылок без слеша на ссылки со слешем:
Если хотите, чтобы все ссылки наоборот были без слеша, добавьте в .htaccess такое правило:
301 редирект на URL без расширения
Допустим, у вас есть страница https://domen.com/about.html, и вы бы хотели, чтобы в адресной строке отображалось только https://domen.com/about. В таком случае добавьте такое правило:
Если нужен редирект не для .html, а для другого расширения, напишите в нужных местах в правиле именно его.
301 редирект с верхнего регистра на нижний
Как и в предыдущих примерах, для поисковых ботов ссылки с разным регистром — https://domen.com/home и https://domen.com/Home — это две разные страницы.
Обычно никто не создаёт такие дубликаты, но некоторые движки делают это автоматически. В этом случае лучше выбрать какой-то главный вариант и настроить на него редирект с остальных.
Лучше всего делать такой при помощи .htaccess и PHP. Можно, конечно, только при помощи .htaccess, но тогда придётся прописывать команды для проверки каждой буквы. Это будет создавать дополнительную нагрузку на Apache. Скорее всего, незначительную, но всё равно. Поэтому лучше делать в два этапа. Для этого добавьте в .htaccess такой код:
Затем создайте в этой же папке файл rewrite-strtolower.php и добавьте в него строки:
301 редирект для нового формата перманентных ссылок на сайте с WordPress
Если у вас сайт на WordPress и вы поменяли формат ссылок на посты или товары, ссылки старого формата перестанут работать. Если до смены формата люди делились ссылками на ваш сайт в соцсетях, после смены формата при переходе по ним будет возникать ошибка 404.
Для таких ситуаций тоже есть решение: сгенерируйте правило для .htaccess в специальном сервисе Yoast. Тогда старые ссылки продолжат открываться.
Когда лучше не использовать редиректы
Редирект лучше не использовать, когда на сайте есть страницы с сильно похожим содержимым или одна и та же страница доступна по нескольким URL. Google будет считать одну из таких страниц канонической, а остальные — её копиями.
Такие страницы часто бывают в интернет-магазинах. Некоторые CMS добавляют в URL страницы параметр, когда посетитель меняет на ней фильтры или сортировку. Например, выбирает размер кроссовок и он добавляется к ссылке в адресной строке браузера. В итоге у страницы помимо основного URL будет ещё несколько с различными дополнительными параметрами.
Другой пример — товар находится сразу в нескольких категориях и URL-адрес меняется в зависимости от того, из какой категории человек на него переходит. Например, есть товар — кроссовки для бега Adidas Runfalcon. Их можно найти в категории «Кроссовки», а также подкатегориях «Кроссовки Adidas» и «Кроссовки для бега».
Некоторые CMS в такой ситуации генерируют три страницы с разными адресами:
- при переходе из категории «Кроссовки» – https://domen.com/krossovki/adidas-runfalcon
- при переходе из подкатегории «Кроссовки Adidas» – https://domen.com/krossovki/adidas/adidas-runfalcon
- при переходе из подкатегории «Кроссовки для бега» – https://domen.com/krossovki/running/adidas-runfalcon
Вроде и дубликаты, но не убирать же из-за этого товар из других категорий. Редирект для каждого дубликата тоже лучше не настраивать. Если товаров в каталоге много, это сотни дополнительных строк в .htaccess и дополнительная нагрузка на веб-сервер.
Лучше всего будет выбрать каноническую страницу и добавить ей атрибут rel=“canonical”. Это делают в коде страницы между тегами .
Атрибут rel=”canonical” говорит поисковикам: у страницы есть дубликаты, но конкретно эту нужно считать главной. В итоге именно она будет отображаться в результатах поиска, на неё перейдёт ссылочный вес и другие характеристики дубликатов, которые влияют на позицию в выдаче.
Как не стоит настраивать редиректы
Бывает, нужно сделать так, чтобы сайт всегда открывался с WWW и по HTTPS. В этом случае настраивать два правила для редиректа — плохая идея. Это называется «цепочка редиректов». Когда сайт сначала перенаправляется с http://example.com на https://example.com, а потом с https://example.com на https://www.example.com.
Каждый новый редирект — это дополнительная нагрузка на веб-сервер. В итоге страница загружается медленнее. Вместо этого лучше объединить два редиректа в одном правиле. Конкретно для нашего примера оно будет таким:
Чтобы найти у себя на сайте цепочку редиректов, проверьте его при помощи сервиса httpstatus.
Синтаксис для редиректов в .htaccess
Этот раздел для тех, кто хочет попробовать понять содержимое правила или проверить его на ошибки, когда редирект не работает. Вот так выглядит синтаксис правила:
RewriteEngine On
RewriteBase /
RewriteCond % <Переменная>Условие Флаг
RewriteRule Шаблон Значение Флаг
RewriteEngine — команда, которая включает компонент веб-сервера Apache, который отвечает за редиректы. Её достаточно указать один раз перед всеми командами.
RewriteBase — команда, которая указывает путь от корневой папки сайта до файла .htaccess. В этом примере косая черта означает, что файл лежит в корневой папке сайта. Её тоже достаточно указать один раз.
RewriteCond — команда, которая определяет условия выполнения редиректа. Например, вы хотите перенаправить все URL в верхнем регистре на URL в нижнем регистре. Тогда условие будет таким: «В запросе есть URL с буквами в верхнем регистре». Если да, происходит редирект. Если нет, веб-сервер пропускает это правило. Причём в одном правиле таких условий может быть неограниченное количество.
RewriteRule — действие, которое веб-сервер должен выполнить при удовлетворении условий в строках RewriteCond.
Переменные
Помогают веб-серверу определить, что конкретно нужно проверить в строке с условием выполнения редиректа. Например, адрес сайта ввели с HTTP или с HTTPS. Или совпадает ли адрес сайта с тем, что указан в условии. Или сделать что-то с частью URL, которая идёт в запросе посетителя после домена.
Переменные всегда пишут в фигурных скобках и ставят перед ними знак процента. Вот самые популярные из них:
%
%
%
%
%
%
Условия
Здесь обычно используют адрес сайта вместе со специальными символами, а иногда только символы, чтобы указать веб-серверу, в каком случае перенаправить посетителя на другую страницу.
Например, вы хотите настроить редирект домена с WWW на без WWW. Тогда условием будет имя со специальными символами: ^www.domen.com$. Оно означает, что редирект должен выполняться, только когда кто-то вводит домен с WWW.
Также с переменной в качестве условия часто используют уточняющие атрибуты. Вот два самых популярных из них:
-f — проверяет, ведёт ли запрос пользователя к реальному файлу на сервере.
Например, вы хотите сделать так, чтобы в конце URL всегда добавлялся слэш. В этом случае нужно исключить сценарии, когда в запросе человека — путь к конкретному файлу, например, domen.com/index.php. Иначе к index.php тоже добавится слэш и тогда страница не откроется, потому что это будет уже не ссылка на файл.
Чтобы таких ситуаций избежать, к переменной %
-d — проверяет, ведёт ли запрос пользователя к реальной папке на сервере.
Здесь та же логика, что и в случае с предыдущим атрибутом, но вместо файла сервер будет искать папку. Например, вы хотите наоборот сделать так, чтобы в конце URL не было слэша. В этом случае вам понадобится исключить сценарии, когда в запросе человека — путь к папке. Иначе слэш удалится и страница не откроется, потому что будет уже не папкой, а файлом без расширения.
Символы
7 — любая цифра от 0 до 9.
[A-Z] — любая буква от A до Z в верхнем регистре.
[a-z] — любая буква от A до Z в нижнем регистре.
[a-Z] — любая буква от A до Z в любом регистре.
[A-Z] <3,6>— любая строка, которая заканчивается на последовательность от 3 до 6 букв в верхнем регистре и диапазоне от A до Z.
2 <3,6>— любая строка, которая заканчивается на последовательность от 3 до 6 цифр в диапазоне от 0 до 9.
. — любой символ, кроме символа конца строки.
? — повтор предыдущего символа 0 или 1 раз.
+ — повтор предыдущего символа от 1 до 65536 разов.
* — повтор предыдущего символа от 0 до 65536 разов. Например, выражению dome*n будут соответствовать значения domen, domeen, domeeeeeeeeen.
\ — экранирующий слэш. Следующий символ после него будет считаться обычным, а не спецсимволом. Иногда без такого слэша правило не будет работать. Например, когда в тексте есть точка, потому что сама по себе точка означает «любой символ».
^(.*)$ — сочетание спецсимволов, которое выбирает URL из условия RewriteCond, чтобы применить к нему действие из RewriteRule.
Флаги
Это дополнительные опции. Всегда перечисляются в квадратных скобках. Если флагов в одной строке несколько, их перечисляют через запятую, например, [L, R=301]. Вот небольшой список популярных флагов:
[R=301] — редирект вместе с его кодом. Если специально не прописать число, оставить только букву R, сработает 302 редирект. Так что для постоянного редиректа прописывайте вручную код 301.
[L] — останавливает процесс преобразования, и текущая ссылка считается окончательной. Обычно этот флаг используют в конце каждой команды.
[NC] — отключает проверку регистра символов при срабатывании правила.
[OR] — указывает на альтернативное условие. Если в правиле две строки RewriteCond, они суммируются. То есть редирект произойдёт только при удовлетворении условий в обеих строках. Если строки с условиями взаимоисключающие, используйте этот флаг. Тогда правило сработает при выполнении хотя бы одного из условий.
Источник