редирект со всех поддоменов на домен
Код состояния HTTP 301 или Moved Permanently («Перемещено навсегда») — стандартный код ответа сервера, который может быть получен, если запрошенный URL-адрес сайта был навсегда перенесен в новое месторасположение.
Проверка кода ответа. Быстрая и бесплатная проверка кодов ответа для списка URL в режиме онлайн реализована в рамках комплекса инструментов «Пиксель Тулс», предусмотрено удобное цветовое кодирование и загрузка URL файлом.
Анализ проведён с помощью инструментов в сервисе Пиксель Тулс.
Options +FollowSymLinks
RewriteEngine On
# Текстовый комментарий, данная строчка не будет обрабатываться.
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://pixelplus.ru/$1 [R=301,L]
Redirect 301 /was.php http://www.site.ru/new.php
При этом, новый адрес указывать необходимо полностью с http и доменным именем.
RewriteRule ^dir /dir-new/$1 [R=301,L]
Скажем, адрес страницы имеет вид: http://www.site.ru/dir/index.php?IBLOCK_ID=1&SECTION_ID=111 тогда для настройки 301 переадресации на новый адрес, необходимо использовать следующее правило:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:
RewriteCond %
RewriteRule ^dir/index\.php$ /new/sef/? [R=301,L]
Если адрес имеет следующий вид: http://www.site.ru/?abc то для перенаправления подойдет последовательность строчек:
RewriteCond %
RewriteRule ^$ /? [R=301,L]
Если требуется настроить переадресацию только для адреса http://www.site.ru/dir/, но при этом чтобы страница http://www.site.ru/dir/index.php?IBLOCK_ID=1 открывалась по старому адресу, необходимо использовать спецсимвол $ в правиле.
RewriteRule ^dir/$ http://www.site.ru/new-dir/ [R=301,L]
Для доменов в зоне РФ действуют все те же правила, но только все кириллические символы необходимо заменить на альтернативный код (он на латинице). В частности, сама зона .рф преобразуется в .xn--p1ai.
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
И для домена в зоне РФ:
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://www.site.ru/si-te/ [R=301,L]
RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301]
RewriteRule ^(.*)$ http://www.newsite.ru/new/ [L,R=301]
RewriteRule ^dir(.*)$ /new-file.php [L,R=301]
RewriteRule ^dir/no-file.html /no-file-new.html [L,R=301]
RewriteRule ^dir(.*)$ /all.php [L,R=301]
RedirectMatch 301 (.*)\.html$ http://www.new-site.ru$1.php
RewriteRule ^img/(.+)\.jpg$ http://img.domain.ru/$1.jpg [R=301,L]
Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.
DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %
RewriteRule ^index\.php$ http://www.site.ru/ [R=301,L]
Для всех индексных страниц на сайте:
RewriteRule ^(.*)index\.php$ http://www.site.ru/$1 [R=301,L]
RewriteCond %
RewriteRule ^(.*)$ http://site.ru%
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L]
Код позволяет поставить 301-редирект со всех папок вида http://site.ru/***/uniqe-file.html на один файл в корне /unique-file.html. Бывает полезен при переделке сайта и изменении ссылок.
RewriteRule ^testovyi/test/?$ /studio/news/detail.php?ID=230354&PAGEN_2=11 [NC,L]
Код позволяет создать копию страницы с относительным адресом /studio/news/detail.php?ID=230354&PAGEN_2=11 по адресу /testovyi/test/
Позволяет устранить наличие дублей URL с HTTPS в индексе поисковых систем.
RewriteCond %
RewriteCond %
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Настройка позволяет отклонить спамный реферальный трафик с ряда ресурсов по заголовку HTTP_REFERER.
Внимание, важно чтобы код ответа сервера для 404 ошибки был именно 404. Путь к файлу указывается с помощью следующей строчки:
ErrorDocument 404 /404-for-me.php
! Для сайтов, на которых используется не сервер Apache, аналогичные 301-редиректы легко настраиваются с помощью PHP.
! Оптимально настраивать все редиректы сразу на конечную страницу (без промежуточных перенаправлений, в один шаг) это улучшает их восприятие со стороны поисковых систем и пользователей.
RewriteCond %
RewriteRule (.*) http://mobile.site.ru/ [L,R=301]
RewriteCond %
RewriteRule (.*) http://no-search.site.ru/ [L,R=301]
Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/
RewriteCond %
RewriteRule ^component/content/$ /? [R=301,L]
Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/
RewriteCond %
RewriteRule ^index\.php$ /? [R=301,L]
. — Точка заменяет произвольный символ.
[abc] — обозначает перечень символов, совпадающих с буквами a, b, или с.
[^abc] — перечень символов, которые не входят в указанных диапазон. Совпадёт с любым символом, кроме a, b, или с.
* — означает, что предшествующий символ может повторяться (0 или более раз).
[abc]* — команда найдёт идущие подряд символы из заданного набора.
[^abc]* — с точностью до наоборот.
.* — заменяет абсолютно любой набор символов. «.*» — найдёт все подстроки между кавычками.
^ — начало строки (в том случае, если используется в начале выражения).
$ — обозначает конец строки.
\w — буква, цифра или подчёркивание _.
\d — заменяет любую цифру.
\D — заменяет любой символ, но не цифру.
7 — заменяет любую цифру.
[a-z] — любая буква от a до z (весь латинский набор символов) в нижнем регистре.
[A-Z] — любая буква от A до Z в ВЕРХНЕМ регистре.
[a-zA-Z] — любая буква от a до Z в любом регистре.
[a-Z] — то же самое.
Памятка по используемым символам и обозначениям
Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.
Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.
Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].
Война с 301 редиректом всех страниц с поддомена на домен
Не далее — как вчера, был у меня прелюбопытнейший опыт, почти что сексуальных отношений с моим виртуальным хостингом. Пытался я настроить 301 редирект со всех страниц своего сайта, который находился до этого на поддомене, на новый домен. Однако — всё по порядку.
Т.к. в реальной жизни я зарабатываю себе на хлеб насущный евроремонтами и внутренней отделкой помещений — то есть у меня сайт на эту тематику, где я выкладываю результаты и фотографии своих трудов, с некоторым описанием процесса. Сайт этот висел на поддомене к моему основному домену direct-market.ru, и был доступен по адресу evroremont.direct-market.ru. По этому же адресу сайт был проиндексирован поисковыми системами, и многие его страницы уже находились в ТОПе Яндекса и Гугла по некоторым поисковым запросам.
С первой задачей я справился успешно, а вот со второй пришлось повозиться. Новый домен я решил не делегировать полностью на DNS своего хостера, а создал две NS-записи в разделе управления DNS-зоной у регистратора. Первая NS-запись типа А — на IP сервера своего хостинга, вторая — CNAME — для доступа к сайту по адресу с www. т.е. — www.ev-ro-rem.ru на тот же IP, что и основной домен.
Теперь оставалось настроить только редиректы. Вот тут то и началась чехарда, обернувшаяся тремя днями нервной переписки с тех.поддержкой хостинга, копаниями в мануалах по .htaccess и кучей экспериментов. После того, как мой новый домен был направлен на IP хостера, его требовалось привязать к каталогу, в котором располагался мой сайт. Каталог сайта носил короткое имя evro, и как уже говорилось ранее — сайт висел на поддомене evroremont.direct-market.ru. Но после настройки редиректов в панели управления хостинга, почему то ничего не работало, кроме перенаправления с основного поддомена на новый домен, без URI.
В общем говоря, после долгих мытарств, я снёс ВСЕ поддомены, обращающиеся к каталогу evro, и новый домен вместе с ними. Потом переименовал каталог в evroremont, и заново подключил к нему домен, при этом опять же — создался заново поддомен evroremont.direct-market.ru, а в редакторе DNS-зон образовались две NS-записи типа А, evroremont.direct-market.ru и www.evroremont.direct-market.ru, направленные на IP сервера хостинга.
Ага, думаю я, сейчас то наконец заработает. И прописываю в хостинг-панели редирект с evroremont.direct-market.ru на ev-ro-rem.ru, указав перенаправление с шаблоном.
И не тут то было.
Результат — тот же самый, что и раньше. Ну ладно, думаю я, сейчас поковыряем .htaccess, именно этот файл отвечает за перенаправления внутри каталога. А так как я не знаток синтаксиса — то пришлось искать аналогичные примеры в интернете, и сверять синтаксис команд. И что вы думаете? Оказывается — эта тупая программная скотина — хостинг-панель, при создании нового редиректа, прописывала в .htaccess лишь ЧАСТЬ положенного кода, конкретно сам редирект, а положенные к нему директивы — НЕТ!
Вот что конкретно писала хостинг панель:
RewriteCond %
^evroremont\.direct\-market\.ru$ [OR]
RewriteCond %^www\.evroremont\.direct\-market\.ru$
RewriteRule ^(.*)$ «http\:\/\/ev\-ro\-rem\.ru\/$1» [R=301,L]
А вот что она ДОЛЖНА БЫЛА ПРОПИСАТЬ:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %^evroremont\.direct\-market\.ru$ [OR]
RewriteCond %^www\.evroremont\.direct\-market\.ru$
RewriteRule ^(.*)$ «http\:\/\/ev\-ro\-rem\.ru\/$1» [R=301,L]
После исправления кода всё заработало как надо, 301 редирект стал перенаправлять переходы с поисковика на новый домен. Всё это время, пока я ковырялся и разбирался в коде, техподдержка жевала сопли, засунув язык в энное место. О чём я им, не без удовольствия, и сообщил. Мораль сей истории такова: не всегда приложения на виртуальном хостинге работают так, как надо. И чаще всего приходится всё делать самому, прописывая всё ручками. А из этого напрашивается ещё один вывод: без хотя бы основных технических знаний — в инфобизнесе делать попросту нечего!
Потратив достаточно долгое время на поиски готового скрипта, пришлось констатировать тот факт, что либо все это работает не совсем правильно, либо вообще не работает.
Теперь я знаю как это сделать и сейчас покажу на примерах. Для начала сделаем поддомены на свежем сайте, т.е. готовой структуры пока нет и можно делать все что угодно.
Теперь подробно остановимся на каждом пункте.
Для запуска mod_rewrite используется команда RewriteEngine on, если ее закомментировать, то весь код перестанет работать, часто это бывает очень полезно.
RewriteBase указывает на использование текущей папки.
RewriteCond устанавливает правила, в зависимости от которых будет или не будет произведена замена адреса. В первом случае проверяется является ли поддомен с названием www, естественно его перенаправлять не нужно, поэтому перед строкой стоит восклицательный знак, обозначая отрицание. В скобках указано com|ru, используется только если вы имеете два одинаковых домена в разных зонах и они являются псевдонимами (алиасам) другу друга. Если вы используете один сайт, то запись будет такой:
Во втором RewriteCond проверяется наличие в имени адреса поддомена, причем работать будет одинаково с www и без него, т.е. сайты www.forum.domain.com и forum.domain.com будут обрабатываться одинаково.
Третье условие используется для проверки уже исправленного адреса, т.к. mod_rewrite выполняется пока условия перестанут подходить. Итак мы проверяем в строке запроса (URI, то что идет после имени домена, например /info.html) наличие папки куда мы перенаправили запрос, в данном случае это sub, перед ним стоит восклицательный знак, который сообщает, что условие не должно выполняться при наличии такой подстроки.
И наконец само правило преобразования адреса RewriteRule. В нем мы заменяем строку запроса на новый адрес:
sub + второй найденный элемент (условие RewriteCond %
Перед запуском этого скрипта вам необходимо создать в папке sub необходимые вам папки поддоменов.
Лучше воздержаться от использования в качестве метки и основной папки простое слово типа sub, т.к. оно может оказаться в адресе страницы, лучше использовать произвольный набор символов.
Бывают ситуации, когда необходимо использовать два разных адреса для одной и той же папки, например:
domain.com/forum/
и
forum.domain.com
В данном случае у нас на сервере уже есть папка forum, и полностью копировать ее еще и в папку sub не очень удобно и не совсем правильно. Найденный вариант использования mod_rewrite не совсем универсальный, но все позволяет обслужить конечное число поддоменов:
Как сделать редирект с поддомена на другой сайт?
Есть поддомен one.example.ru/1/
У хостинг-провайдера ограничение на кол-во поддоменов, и, например, создать новый поддомен two.example.ru/2/
— возможности нет.
Можно ли через .htaccess сделать редирект с two.example.ru на one.example.ru/2/?
Хочу чтобы клиент перешел по ссылке sub2.example.ru
и попал, условно на yandex.ru
ну и собственно когда у вакс реализован один из вышеперечисленных вариантов, то да моно сделать редирект, положив его в 1 htaccess
но не работает, при переходе на two.example.ru не редиректит на one.example.ru/2
Т.е. всё равно не работает. Да, там стоит точка..
а вообще странный провайдер если не дает создать запись типа A, но дает типа CNAME
если можете менять записи типа NS, то вообще можете яндексу отдать рулить зоной
. или я не так все понял
PeeX, Да, не совсем так поняли. Объясняю в силу своих познаний, но надеюсь на Ваше понимание.
Есть сайт example.ru, есть сайт на поддомене one.example.ru. Всё, больше я не могу создавать поддомены через провайдера в функционале
и мне хотелось бы через DNS создавать поддомены по типу 2.example.ru, 3.example.ru, etc.
301 редирект может быть серверным или браузерным, последний из них пользуется меньшей популярностью, так как приводит к замедленной подгрузке страниц.
Код состояния HTTP 301 – ответ сервера на запрос браузера пользователя или поисковой системы, означающий, что запрашиваемая страница, более не доступная по текущему адресу, перемещена постоянно на новый, прежний URL является неактуальным, а вес с него переносится на новый адрес.
Для чего нужен 301 редирект
Корректная настройка 301 редиректа особенно важна с точки зрения SEO. Именно она помогает показать поисковой системе что, например, сайт сменил домен либо текущая страница переехала на новый адрес, а, значит, необходимо передать вес со старых URL и обновить старые URL на новые в поисковой выдаче.
Когда необходим редирект
Ниже обозначим основные наиболее актуальные для настройки 301 редиректа ситуации.
В случае переезда сайта на новый адрес необходимо настроить постраничный редирект между главными страницами, а также листингами и карточками, чтобы страницы oldsite.ru перенаправляли пользователей и робота на newsite.ru.
Переадресация должна выполняться со всех адресов старого домена на аналогичные страницы нового домена.
В данном случае необходимо перенаправлять пользователей со страниц с незащищенным протоколом http на страницы с защищенным протоколом https.
Такая необходимость может возникнуть в нескольких случаях – смена CMS, смена урловой структуры на сайте и т.д.
Таким образом, необходимо отправить пользователей с site.ru/page1/ на site.ru/catalog/page1/.
Такая необходимость появляется, например, если вы хотите отделить какое-либо направление своего сайта в отдельное.
Например, вебмастер покупает домены site.com, site.ru, site.net, site.org и site.biz и на четырех последних сайтах настраивает редирект на основной – site.com.
Наличие дублей может существенно подорвать вашу стратегию продвижения и привести к понижению в ранжировании в поисковых системах. В случае, если в индексе поисковых систем обнаружены дубликаты продвигаемых страниц, настройка переадресации – лучший выход.
Основные правила настройки переадресации
Основные способы настройки редиректов
Например в 1C-Битрикс существует множество модулей, таких как SEO Редиректы.
Для других CMS также можно установить модули. Вот некоторые ссылки на модули для распространенных CMS: Opencart, WordPress, Webasyst.
header(‘HTTP/1.1 301 Moved Permanently’);
Например, rewrite ^https://$host$request_uri? ;
$host – имя хоста из запроса, если отсутствует – имя в поле «Host» заголовка, если тоже отсутствует – имя сервера;
$request_uri – первоначальный запрос с аргументами (все, что идет после доменного имени).
могут иметь следующие параметры:
permanent – перенаправление с кодом 301,
redirect – перенаправить с кодом 302,
last – закончить обработку с переходом в новый location,
break – закончить обработку и остаться в текущем location.
Все возможные правила переадресаций для разных задач
Мы постарались подобрать самые часто используемые правила перенаправления. Если вдруг какое-то правило перенаправления не сработает на вашем сайте, попробуйте альтернативное из нашего списка. Стоит учесть, что не все представленные правила могут работать корректно при той или иной настройке сервера либо с той или иной CMS.
Склейка зеркал сайта (www и без www)
301 редирект с www на без www (главное зеркало – домен без www):
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
301 редирект с без www на www (главное зеркало – домен с www):
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
Редирект с http на https
Если данная конструкция не сработает, попробуйте другой вариант:
Если циклическое перенаправление на страницах осталось, попробуйте такой вариант:
Если редирект не работает и в этом случае, попробуйте такой вариант:
Бывают случаи, когда необходимо провести редирект на https всех страниц, кроме одной. Тогда используйте следующую конструкцию:
Для одной страницы
Для редиректа с http на https одной страницы (например page.php), в файл добавьте следующее:
Редирект с https на http
Если необходимо сделать 301 редирект всего сайта с https на http, в файл прописывается следующее:
RewriteRule ^(.*)$ https://name.site/$1 [R=301,L]
Редирект с двух последовательных слешей на один
Если необходимо сделать 301 редирект для устранения двух или множества последовательных слешей и заменить их одним в URL, то прописывается следующее:
Редирект со страниц со слешем на без слеша (для всего сайта)
RewriteRule ^(.*)\/$ /$1 [R=301,L]
Или более короткий вариант:
RewriteRule ^(. )/$ /$1 [R=301,L]
Редирект со страниц без слеша на слеш (для всего сайта)
Обратный вариант применяется, когда нужно использовать адреса со слешем.
Один 301 редирект (а не два последовательных!) на без www и со слешем на конце адреса страницы
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]
RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]
Один 301 редирект (а не два последовательных!) на c www и со слешем на конце адреса страницы
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
Один 301 редирект (а не два последовательных!) на c www и без слеша на конце адреса страницы