Htaccess редирект на другой сайт


Ренат Рафаилевич комментирует…

Большое Вам спасибо Константин!!! За очень полезную статью, понятную с четкими инструктажем и иллюстрациями.

Константин Кирилюк комментирует…

2Ренат Рафаилевич да, с иллюстрациями у меня даже перебор получился… целых две 😉 но может в дальнейшем что-то ещё такого добавлю.

Лариса Марштупа комментирует…

Константин, а когда можно удалять сайт на старом домене?


Константин Кирилюк комментирует…

2Лариса Марштупа здесь два ориентира трафик и ссылочный вес. В случае с трафиком, нужно держать домен до тех пор, пока трафик с него не исякнет. В случае со ссылками несколько сложнее, удалив старый домен вы потеряете склеившийся вес. В начале это будет не заметно, но после пересчёта всё станет очевидно. Так что надо смотреть по обстоятельствам.

Сергей Назаров комментирует…

Создание редиректа с одного домена на другой зачастую подразумевает (условно говоря) использование двух сайтов. Один сайт со старым доменном, и один с новым. Это не всегда приемлемо, с учетом лимитов на количество сайтов. Поэтому некоторые хостинг провайдеры выделили эту функцию в отдельную услугу.

Например, в на домашней странице cPanel есть блок «Домены», где нужно смотреть пункт «Перенаправления». Если есть кликаем и добавляем такое. Выглядеть этом может так:

[img]//lh3.googleusercontent.com/-uGMasJRWxW8/VTu58y1tdKI/AAAAAAAACKU/0Z4zYWu_JeA/w702-h457-no/cpanel-redirect.png[/img]


Сергей Назаров комментирует…

Ещё один интересный момент, связан с перенаправлением кириллических доменов — не все сервисы поддерживают IDN-домены. Лучше использовать punycode — метод преобразования символов Unicode в последовательность символов из ASCII. Так домен: МойСайт.РФ – превращается в: xn--80arbjktj.xn--p1ai. Для преобразования можно воспользоваться любым punycode конвертором, например: wwhois.ru/punycode.php

[img]//lh5.googleusercontent.com/-sLgCqipt81o/VTu8vR_mAyI/AAAAAAAACLA/vYqVeOKyetA/s620/punycode-convertor.jpg[/img]

Константин Кирилюк комментирует…

2Сергей Назаров Честно говоря, не знал о добавлении перенаправления в ПУ хостингом. Функция вполне логична! С другой стороны, надо смотреть, как работает такой редирект. По сути, такой вариант, не может оставить доступ к robots.txt на старом домене. Конечно, это не фатально, но тем не менее.

Константин Кирилюк комментирует…

2Сергей Назаров да, момент с кириллическими доменами я действительно упустил. Не люблю такие домены. Не подходит кириллица в качестве компьютерного языка и т.п. Тем не менее, всё остальное остаётся без изменений. За дополнение огромное спасибо!

Константин комментирует…

Инструкция понятная, прописал в файлах на купленном домене все необходимые строки, жду склейки.

Владимир комментирует…

Хорошая статья, минимум воды, хорошая помощь новичкам

Анонимный комментирует…

Константин, подскажите, пож-ста, как мне исправить ошибку.
У меня есть сайт на WordPress.


r />Я сменила постоянные адреса вот такого вида http://site.ru/2016/04/18/sample-post/ на такие http://new-site.ru/sample-post/. И стала переносить сайт на новый домен.
Теперь я пишу редиректы, но у меня ничего не получается(
А именно:
В .htaccess:
Options +FollowSymLinks
RewriteEngine On
RewriteCond ^(.*)$ http://site.ru/2016/04/05/lpg-massazh/$1 [L,R=301]
RewriteRule ^(.*)$ http://new-site.ru/lpg-massazh/$1 [L,R=301]

Но все-равно вылетает страница 404, потому что редирект идет на страницу такого вида:
new-site.ru/2016/04/05/lpg-massazh
Т.е. дата эта никак не хочет убираться.
Я понимаю, что убрав эту дату, надо как-то сказать об том. Но как?
Что я не так делаю… Подскажите, пож-ста.

Константин Кирилюк комментирует…

2Анонимный попробуйте так:

RewriteCond %{HTTP_HOST} ^(www.)?site.ru$
RewriteRule ^d{0,4}/d{0,2}/d{0,2}/(.*)$ http://new-site.ru/$1 [R=301,L]

RewriteCond задаёт условие, а не перенаправление.

Анонимный комментирует…

Здравствуйте! Будьте добры, подскажите, пожалуйста, обязательно ли иметь сайт на домене в зоне рф для редиректа на одну из страниц создаваемого нового сайта, находящегося на другом домене в зоне ru, учитывая, что названия доменов разные?


Дело в том, что я создаю новый сайт на SMS хостинге под WordPress, который будет располагаться в зоне ru, в которой нет свободного нужного домена, в связи с чем предполагаю купить свободный домен в зоне рф, с которого предполагаю перенаправлять пользователей на соответствующую страницу сайта, который будет находиться в зоне ru.

Я имею ввиду, чтобы, пользователь, набирая в поисковике один url-адрес домена зоны рф, попадал на определённую страницу сайта другого домена зоны ru.

В онлайн-чате обращался к консультанту хостинг-провайдера, на котором предполагаю разместить сайт, ответившего "Все редиректы Вы сможете указывать в панели управления хостингом. Если необходимо настраивать редиректы с определенных страниц с одного домена на другой, сможете также указать.", который счёл не достаточно понятным и убедительным.

В связи с чем прошу, пожалуйста, грамотных специалистов помочь разобраться в этом сложном для меня вопросе и ответить, возможен ли технически редирект с домена рф без сайта на домен ru с сайтом или для этого надо создавать сайт на домене зоны рф и если возможен, то как именно?

Константин Кирилюк комментирует…

2Анонимный В базе данных поисковой системы может присутствовать только «главное зеркало» сайта. Если вы планируете перенаправлять пользователей с домена .рф, на домен .ru, то сайт на домене .ru постепенно заменит сайт на домене .рф и станет «главным зеркалом».


www.chuvyr.ru

Редирект 301 (301 Permanent Redirect) используется в нескольких случаях: при смене домена, при переносе страницы сайта, для склейки имени сайта с www и без него. Это важно для передачи Page Rank (PR) и сохранения поискового трафика.

Сам я столкнулся с его необходимостью, когда после переезда своего портала из зоны com, в ru обнаружил, что Google, Яндекс и другие поисковые системы, естественно не «забывают» старого сайта (отчасти еще и из-за того, что у меня была некорректно установлена своя страница, для обработки 404 ошибки, которая возвращала код ответа 200 OK). Более того, Google за полгода оставил для нового сайта PR=0, хотя для старого он сохранился PR=4.

Тема 301 редиректа постоянно обсуждается в различных SEO-форумах, да и каждая поисковая система в своей системе помощи имеет специальные разделы. Пока разбирался я нашел перечисленные ниже варианты организации редиректа, часть из которых опробовал у себя.

301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код «301» интерпретируется как постоянное перемещение («moved permanently»).


  1. Простой редирект (в файле .htaccess или httpd.conf для Apache):

    Redirect 301 / http://www.you.com/new.htm
    где:
    Redirect 301 — это инструкция, говорящая что страница перемещена
    / — означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
    http://www.you.com/new.htm — новая страница или сайт (не забывайте поставить последний «/», если переадресация идет на сайт).

    Чтобы переадресовать только страницу, сохранив PR старой страницы:
    Redirect 301 /old/old.htm http://www.you.com/new.htm
    где:
    /old/old.htm — путь и имя старой страницы

    Аналогичный синтаксис для переадресации сайта:
    RedirectPermanent / http://www.you.com/

    Пример переадресации каталога:
    RedirectPermanent /old-directory http://www.domain.com/new-directory/

    Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):

    Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/ 

    Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.


  2. Использование mod_rewrite (прописывается в файле .htaccess):

    Ставшая классической задача слияния имена сайта с www и без него, решается так:

    Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite.com RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] .  

    или альтернативный синтаксис:

    Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L] 

    Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

    Редирект старого домена на новый:

    Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L] 

    Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:

    RewriteEngine on RewriteBase / RewriteRule ^rewrite.htm$ rewrite.html [R=permanent] 

    Для замены всех .htm файлов .html файлами:

    RewriteEngine on RewriteBase / RewriteRule ^(.*).htm$ $1.html [R=permanent] 
  3. Редирект на PHP:

    <?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://www.newdomain.ru/newdir/newpage.htm"); exit(); ?> 

    Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:


    <? $ref=$_SERVER['QUERY_STRING']; if ($ref!='') $ref='?'.$ref; header('HTTP/1.1 301 Moved Permanently'); header('Location: http://newdomain.com/'.$ref); exit(); ?> 
  4. Редирект на ASP

    <%@ Language=VBScript %> <%  Response.Status="301 Moved Permanently" Response.AddHeader "Location", "http://www.new-url.com" response.end %> 
  5. Редирект на ASP.NET

    <script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.new-url.com"); } </script> 
  6. Редирект на ColdFusion

    <.cfheader statuscode="301" statustext="Moved permanently"> <.cfheader name="Location" value="http://www.new-url.com"> 
  7. Редирект с помощью meta refresh

    <meta http-equiv='refresh' content='0; url=http://newdomain.com'> 

    где 0 — задержка переадресации в секундах, newdomain.com -страница, куда переадресуем.


    которые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.

  8. www.rublin.org

    Самый простой пример редиректа: с сайта на сайт

    Redirect / www.example.com

    www.example.com — сайт, на который мы перенаправляем запрос пользователя.

    Чуть более сложный пример — если мы хотим сделать редирект со страниц нашего сайта на другой сайт. Или, например, сделать редирект на главную страницу.

    Redirect /semantica semantica.in/

    Redirect /semantica/blog semantica.in/blog

    Redirect 301 /kernel semantica.in/

     

    Что всё это значит:

    1 строка — при обращении к странице www.example.com/semantica будет открываться сайт semantica.in/

    2 строка — при обращении к http://www.example.com/semantica/blog будет открываться semantica.in/blog

    3 строка — веб-сервер будет отдавать код 301 о постоянном переезде на новый URL

     

    Теперь, когда вы примерно понимаете, как это работает, можно переходить на задачи посложнее.

     

     

    Сложные редиректы

    Для сложных редиректов существует модуль mod_rewrite — это средство преобразования URL-адресов, использующее регулярное выражение. Для редиректа используются три важные директивы: RewriteCond, RewriteRule и RewriteEngine.

    1. RewriteEngine включает или выключает работу механизма преобразования:

    Положение on-off включает и выключает работу модуля.

    2. RewriteCond — определяет условие какого-либо правила, при котором происходит преобразование. Сразу после директивы чаще всего идут переменные %{HTTP_HOST} и %{REQUEST_URI}, которые означают адрес сервера (например, example.ru) и ресурс, запрошенный в строке HTTP-запроса, соответственно.

    3. RewriteRule — идёт после одного или нескольких RewriteCond. Это правило преобразования URI, которое применяется только при условии выполнения RewriteCond.

    Синтаксис директивы RewriteRule выглядит следующим образом:

     

    Здесь стоит дать пояснение к используемым символам регулярного выражения, которое задает шаблоны строк:

    Метасимволы используются для задания групп символов и меток в шаблоне:

    • ^ — метка начала строки,
    • $ — метка конца строки,
    • — экранирующий слеш, позволяет считать следующий за ним метасимвол обычным символом,
    • . — точка, обозначает любой символ, но только один,
    • () — группировка.
    • ! — отрицание,

    Флаги определяют дополнительные опции для данного правила и перечисляются в квадратных скобках через запятую:

    • NC — (nocase) отключает проверку регистра символов.
    • R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY).
    • L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.

     

    Как сделать 301 редирект? 

    Теперь, зная эти правила, мы можем попытаться самостоятельно сделать редирект с помощью htaccess.

    1. Редирект .htaccess на другую страницу
    Redirect 301 /old-post.html http://new-site.ru/new-post.html

     

    1. Редирект .htaccess с www на без www
      RewriteEngine on    RewriteCond %{HTTP_HOST} !^site.ru$ [NC]    RewriteRule ^(.*)$ site.ru/$1 [R=301,L]  

     

    1. Редирект .htaccess с без www на www
      RewriteEngine on    RewriteCond %{HTTP_HOST} !^www.site.ru$ [NC]    RewriteRule ^(.*)$ www.site.ru/$1 [R=301,L]  

    где site.ru — ваше доменное имя.

     

    1. Редирект с index.php (html) на главную страницу
      RewriteEngine on    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.(php|html|htm) HTTP/    RewriteRule ^(.*)index.(php|html|htm)$ $1 [R=301,L]  

     

    1. Редирект со слешем на без слеша
      RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} ![^/]$  RewriteRule ^(.*)/$ /$1 [R=301,L]  

     

    1. Редирект со страниц без слеша на слеш
      RewriteCond %{REQUEST_URI} !?  RewriteCond %{REQUEST_URI} !&  RewriteCond %{REQUEST_URI} !=  RewriteCond %{REQUEST_URI} !.  RewriteCond %{REQUEST_URI} !/$  RewriteRule ^(.*[^/])$ /$1/ [R=301,L]  

     

    1. Редирект всех страниц одного домена на главную другого домена
      RewriteCond %{REQUEST_URI} (.*)  RewriteRule ^(.*)$ http://site.ru/ [L,R=301]  

     

    1. Редирект с http на https через. htaccess
      RewriteCond %{HTTPS} !=on  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]  

     

    1. Редирект с https на http
      RewriteCond %{HTTPS} =on  RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]  

     

    1. Избавление от дублей страниц

    Если вы заметили, что к адресу основной страницы приклеивается что-то вроде &sa=123 456 или &crw=123 456 и подобное, просто замените буквенную часть в следующем коде

      RewriteCond %{REQUEST_URI} ^(.*)&sa=  RewriteRule ^(.*)&sa=(.*)$ $1 [R=301,L]  

    Пример: объясняем на пальцах

    Как с помощью 301 редиректа сделать так, чтобы по запросу site.ru/category/art1/zapis/ в строке адреса было site.ru/zapis/, то есть /category/art1 вырезалась бы из строки, но после вырезания строки показывалось содержимое site.ru/category/art1/zapis/?

    Легко:

        RewriteCond %{ENV:REDIRECT_STATUS} ^$  RewriteRule ^category/art1/zapis/$ http://%{HTTP_HOST}/zapis/ [R=301,L]  RewriteRule ^zapis/$ /category/art1/zapis/ [L]    

    А теперь давайте подробнее разберем, что же тут написано и что вообще происходит.

    Как известно mod_rewrit на apache постоянно просматривает список правил, пока URL можно хоть как-то изменить.
    И не редко получаются бесконечные циклы.

    Чтобы ограничить цикл выполнения правил одной итерацией, можно использовать конструкцию из первой строки. Она предает apache статус был ли выполнен редирект или нет и если да, то пропустить следующие правила. К слову, на nginx эта строка не нужна.

    Вторая строка делает 301 редирект с www.site.ru/category/art1/zapis/ на www.site.ru/zapis/
    Третья же строка говорит серверу, что если адрес вида www.site.ru/zapis/, то надо показывать то, что находится по адресу www.site.ru/category/art1/zapis/

    Помните, что с великой силой редиректа приходит и великая ответственность, так что используйте полученный знания с умом.

     

     

    1. Принцип «от меньшему к большему»: располагайте редиректы от частных к более глобальны. Т. е. переадресация со страницы на страницу будет выше, чем переадресация с без www на www.
    2. Избегайте последовательных — двойных, тройных — редиректов. Один редирект перенаправляет пользователя только один раз.
    3. Проверьте HTTP заголовки и статусы ответа сервера, чтобы убедиться в правильности работы редиректа.

     

    В заключении хотелось бы по пунктам огласить условиях при которых стоит и не стоит использовать .htaccess переадресацию.

     

    Когда редирект необходим

    1. Вы переехали на другой домен: и вам логично не хочется потерять своих клиентов — настоящих и потенциальных, а также есть необходимость передать вес прошлого сайта на новый.
    2. Хотите склеить зеркала: у вас несколько доменных имён с разным написанием бренда и вы перенаправляете всех посетителей на основной сайт.
    3. Страница сменила свой адрес: структура вашего сайта была реорганизована и вы пытаетесь предотвратить возможный беспорядок.
    4. Хотите избавиться от дублей страниц или копии сайта: не стоит относится к дублям как чему-то безвредному и незначительному. С дублями вы теряете в весе и сдаете позиции конкурентам, а так же дублирование контента может привести к штрафам от поисковых систем.

     

     

    В каких случаях не нужно использовать редирект?

    1. Вы временно переезжаете на новую страницу: для этого есть 302 и 307 код, это гарантия того, что не произойдёт склейки страниц и оригинальная страница не выпадет из поисковой выдачи.
    2. Вы переезжаете из-за проблем со старым доменом: если у вас есть баны, фильтры и штрафы, то при склейке к вам перейдет не только ТИЦ и PR, но и все беды, от которых вы бежали.

    semantica.in

    Когда полезно применять редирект

    • При переносе сайта на новый домен. Посетителей сайта по старому адресу, желательно, автоматически перенаправлять на другой домен;
    • При перемещении страниц или разделов сайта. Редирект применяется для переадресации пользователей на новый, правильный адрес страницы или раздела. Очень важно для сохранения целостности сайта и доступности информации;
    • Для периодического обновления страницы. Обновление страницы, своего рода частный случай редиректа страницы на саму себя, но с задержкой по времени! Полезная возможность на сайтах с текстовыми онлай-трансляциями, чатах.
    • При продвижении сайта. Редирект может применяться, например, для ускорения «склейки» адресов страниц сайта с префиксом www и без него;

    На заметку! Аккуратное и правильное использование 301-го редиректа старых страниц на новые или старого сайта на новый адрес, позволяет сохранить позиции сайта в поисковых системах. Использование 301-го редиректа передаёт PageRank страницы на новый адрес.

    Примеры исполнения

    В зависимости от поставленной задачи и возможностей разработчика для выполнения редиректа может применяться:

    • «JavaScript» (выполняется на стороне клиента, браузера);
    • мета-тег «Refresh» (выполняется на стороне клиента);
    • скрипт, например, на языке «PHP» (выполняется на стороне сервера);
    • директивы mod_rewrite в файле .htaccess (выполняется на стороне сервера).

    Как видно из способов реализации, команда на редирект может поступать со стороны браузера (в случае использования яваскриптов или мета-тегов) или от сервера (в случае отправки браузеру специального ответа, содержащего заголовок «Location»). Остановимся подробнее на каждом из способов.

    Редирект с помощью «JavaScript»

    «Приказать» браузеру сделать переход на другую страницу можно средствами языка программирования javascript.

    1. location="http://www.example.com";
    2. document.location.href="http://www.example.com";
    3. window.location.reload("http://www.example.com");
    4. document.location.replace("http://www.example.com");
    5. setTimeout('document.forms["searchform"].Submit.click()', 100);
      — эмуляция клика по кнопке отправки формы. Подобный приём редиректа частенько используют строители дорвеев.

    На заметку! Метод reload() полностью моделирует поведение браузера при нажатии на кнопку «Reload» в панели инструментов. А метод replace() позволяет заместить текущую страницу на другую страницу. При этом посетитель не сможет вернуться на предыдущую страницу с помощью кнопки браузера «Back», так как запись в history о старой странице полностью замещается новой.

    В момент выполнения одной из перечисленных выше команд javascript, сразу же произойдёт загрузка новой страницы. Но чаще необходимо делать редирект с задержкой. В javascript для исполнения кода с задержкой Вы можете использовать функцию setTimeout() или setInterval().

    Mета-тег «Refresh»

    Мета-тег редиректа необходимо использовать в заголовке html страницы, между тегами <head></head>. Подобный мета-тег часто используют на страницах, которые требуют постоянного периодического обновления. Например, на сайтах с онлайн-трансляциями матчей и т. п. событий.

    Пример мета-тега для обновления страницы с задержкой по времени:

    <meta http-equiv="refresh" content="0; url= http://www.example.com" />,

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

    Особое внимание следует уделить редиректам, поступающим со стороны сервера. Важно понимать, что редирект бывает временным (статус 302) и перманентным (статус 301, страница перемещена навсегда).

    Чтобы браузер выполнил команду редиректа, сервер должен прислать в заголовке, например, следующий ответ:

    HTTP/1.1 301 Moved Permanently
    Location: http://www.example.com

    Подобный ответ сервера, сообщает браузеру посетителя, что запрашиваемая страница навсегда перенесена и доступна по новому адресу (разумеется, домен www.vashmaster.ru в примере мы указали в качестве наглядности).

    Как сделать редирект на PHP

    Как мы уже заметили ранее, для выполнения редиректа скрипт на сервере должен отправить в браузер посетителя специальный заголовок. В языке программирования PHP отправку заголовков с редиректом можно сделать с помощью функции header().

    Пример готового кода PHP:

    <?php
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.example.com/"); /* Redirect browser */
    /* Make sure that code below does not get executed when we redirect. */
    exit;
    ?>

    Делаем редирект средствами .htaccess

    Директивы, прописанные в файле .htaccess обрабатываются сервером «Apache». Приведём несколько рабочих примеров переадресации:

    1. Redirect 301 / http://www.example.com/
    2. RedirectPermanent / http://www.example.com/
    3. Redirect 302 / http://www.example.com/

    Более сложные решения, но очень полезные, можно использовать при подключенном модуле «Apache» — mod_rewrite. Команды для модуля mod_rewrite прописываются в файле .htaccess.

    Пример содержимого файла .htaccess с использованием mod_rewrite:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule (.*) http://www.example.com/$1 [R=301,L]

    Если этот файл .htaccess разместить на другом домене, то любые запросы будут автоматически перенаправляться 301-м редиректом на сайт www.example.com. Адрес посещённой страницы будет сохранён. Подобный редирект можно использовать с купленных «пиаристых» доменов, например, для передачи PR своему основному сайту.

    На заметку! 301-й редирект называют безопасным! Данный редирект сообщает, что страница навсегда перенесена на новый адрес. Этот факт хорошо определяется поисковыми системами и практически все поисковые параметры старой страницы передаются новой. Например, такие факторы как ссылочное, PR и т. п. При 301-м редиректе страница на новом адресе как правило не теряет свои позиции в поисковых системах, что делает подобные переносы страниц и разделов сайта незаметными для посетителей и без ущерба трафику из поисковых систем.

    Приведём пример файла .htaccess с 301-м редиректом, который часто используется в случае переноса или переименования директории раздела сайта:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteRule ^articles(/?)(.+)?$ http://example.com/news/$2 [R=301,L]

    Данные директивы mod_rewrite сообщают браузеру посетителя, что старая страница, например, по адресу http://example.com/articles/article-1.html навсегда перенесена и доступна на нашем сайте по новому адресу http://example.com/news/article-1.html.

    Иногда возникает необходимость переправить трафик с тестового поддомена на основной домен

    Данный способ работает с Apache и .htaccess.

    И так, как же сделать перенаправление с поддомена на основной домен c помощью .htaccess?

    В общем случае всё выглядит так:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^test.example.com$ [NC]
    RewriteRule ^(.*)$ http://example.com%{REQUEST_URI} [R=301,NC,L,QSA]

    В заключение, приведём файл .htaccess c универсальным редиректом с домена с www на домен без www:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} ^www.([^.]+.ru)$ [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    Пожалуй, на этом остановим наш рассказ. Нам удалось в одной статье перечислить основные приёмы организации редиректов, от использования javascript до отправки необходимых заголовков прямо из скриптов на сервере. Надеемся, не зря!

    Делайте удобные и эффективные сайты!

    Автор: «Ваш МАСТЕР»

    exluziv.com

    Полезные советы

    • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
    • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы — вес исходной страницы может не передаться.
    • При составлении файла .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-адреса и строка считается окончательной.

    canwas.ru

    Редирект .htaccess: постоянное перенаправление, 301

    Подобная штука имеет разные названия. Непонятки может вызвать разве что число — почему же 301? Суть кроется в самом протоколе HTTP, который на запросы клиента отвечает определённым кодом состояния. Код 404 Not Found (Страница не найдена) известен почти всем. Код 200 OK почти не известен, но именно он означает, что всё в порядке и документ будет показан в браузере. А вот код 301 Moved Permanently означает, что документ окончательно перебрался на новый адрес. Именно его и называют чаще всего перенаправлением, хотя общий пул ответов обозначен как — 3xx: Redirection.

    В общем случае, для безусловного внешнего (назовём его пользовательским) редиректа, при котором браузер автоматически переадресовывается на другую страницу, обычно незаметно для пользователя (изменяется адресная строка), можно в .htaccess поместить такой код:
    RewriteEngine On
    RewriteRule .* http://newsite.ru/ [L,R=permanent]

    Здесь, первая строка включает механизм модуля mod_rewrite, который позволяется вытворять с адресами всё, что угодно. Назовём это преобразованием URL по условиям на лету. Вторая строка определяет непосредственно правило для преобразования, в примере выше все запросы редиректятся на http://newsite.ru/. В квадратных скобках размещаются флаги: L — последнее (Last) правило, R — тип перенаправления (Redirect), указывается в виде R=code, где code — буквенное или числовое обозначение (permanent или 302).

    Этот способ хорош, когда вам неважно, на какую страницу нового сайта ссылаться. Но если вы переехали на другой домен, то желательно делать редиректы всех запросов с сохранением адресов. Для этого используйте такой код:
    RewriteRule ^.*$ http://newsite.ru/$0 [QSA,L,R=permanent]
    Новый флаг QSA сохранит так же и параметры, которые можно встретить в адресах после знака вопроса. В уже знакомом примере:

    https://a-panov.ru/?p=389

    если я размещу в .htaccess код выше, то произойдёт перенаправление на адрес http://newsite.ru/?p=389 чего без данного флага не было бы.

    Как настроить редирект на www (или без www)

    Подобные перенаправления требуются для случаев, когда сайт доступен по вариантам nsite.ru и www.nsite.ru, в этом случае поисковики считают их дублями и могут либо самостоятельно выбрать один из вариантов в качестве главного зеркала, либо в поиске будут варианты с обоих доменов. В общем случае, это отрицательный фактор при ранжировании сайта.

    Вариант попроще, для одного домена. Перенаправление производится с поддомена www.site.ru на site.ru:
    RewriteCond %{HTTP_HOST} ^www.nsite.ru$
    RewriteRule .* http://nsite.ru/$0 [QSA,L,R=permanent]

    Здесь появилась новая директива RewriteCond, которая задаёт условие, при котором должны срабатывать редиректы — правила RewriteRule. Условие, в данном случае, имя домена, соответствующее www.nsite.ru (в регулярных выражения символ точки означает «любой символ», поэтому его желательно экранировать с помощью обратного слеша).

    Обратное перенаправление тоже выполнить очень просто:
    RewriteCond %{HTTP_HOST} ^nsite.ru$
    RewriteRule .* http://www.nsite.ru/$0 [QSA,L,R=permanent]

    Оба варианта рабочие, но у них есть маленький минус — для каждого нового конфига необходимо заменять домен nsite.ru на свой собственный. Нельзя ли сделать уникальный вариант? Легко!

    Редирект с любого поддомена www:
    RewriteCond %{HTTP_HOST} ^www.(.*)$
    RewriteRule .* http://%1/$0 [QSA,L,R=permanent]

    Редирект на поддомен с www:
    RewriteCond %{HTTP_HOST} !^www.
    RewriteRule .* http://www.%{HTTP_HOST}/$0 [QSA,L,R=permanent]

    Как создать .htaccess

    Такие вопросы тоже возникают. Проблема в том, что стандартный Проводник (приложение в Windows, отвечающее за графический интерфейс) не позволяет создавать файлы, начинающиеся с точки (созданием файлов или папкок осуществляется щелчком правой кнопкой на рабочем столе или в окне, и выбора нужного действия из списка Создать). Но выход есть: открывайте стандартный рекдатор Notepad (блокнот), в меню выбираете Файл → Сохранить как…, и в качестве имени сохраняемого файла указываете .htaccess — после этого он будет создан.

    Файл .htaccess не работает

    Бывают случаи, когда директивы из файла не работают. Обычно это вызвано тем, что в конфигурации Apache отключена поддержка .htaccess, за что отвечает директива:
    AllowOverride none

    Обычно это делается, чтобы несколько увеличить быстродействие — в этом случае веб-сервер не производит поиск и разбор .htaccess.

    Возможен и такой вариант, что на сервере не используется Apache, например, IIS — основной «гость» на Windows-хостинге. Для уточнения свяжитесь с поддержкой своего хостера.

    Есть ли какой-нибудь аналог .htaccess в nginx?

    Ещё один довольно частый вопрос. В этом веб-сервера такой возможности нет. Однако, подобное обычно и не требуется. Дело в том, что nginx, как правило, устанавливается в качестве фронденда, т. е. принимает и обрабатывает все запросы, которые либо выполняет сам, либо перенаправляет на бэкенд, роль которого может выполнять Apache, который можно дополнительно конфигурировать с помощью .htaccess.

    a-panov.ru

    Перенаправление доменов сайта

    Редиректы используются для информирования серверов о том, что контент сайта был перенесен с одного URL-адреса на другой. Делать это необходимо, когда исходный веб-адрес (цель входящей ссылки) занимает высокие позиции в выдаче поисковых систем (SERP). В этом случае редирект сообщает поисковому роботу, что нужный контент был перенесен, предоставляя пользователю ссылку на новый адрес.

    Без таких переадресаций веб-мастера столкнулись бы со страницей ошибки 404 вместо искомого сайта. Это то, чего коммерческие ресурсы особенно стремятся избежать. Онлайн-магазины предлагают постоянно меняющийся ассортимент товара, который отображается на многих страницах. Как только товар перестает продаваться, потенциальных клиентов перенаправляют на страницу с аналогичным продуктом. Это позволяет более эффективно управлять потоком посетителей, а также уменьшить показатель отказов.

    Кроме этого перенаправление позволяет одинаковому контенту быть доступным по различным веб-адресам. Все альтернативные адреса перенаправляются в сторону приоритетного домена сайта:

    Типы редиректов

    Различают клиентские и серверные HTML meta redirect. В случае с серверными перенаправлениями происходит передача кодов состояния HTTP пользовательским агентам (браузерам и поисковым роботам).

    Когда дело доходит до перенаправлений на стороне клиента, все выглядит по-другому: они выполняются без какого-либо ответа, и никакие коды состояний не передаются. Именно поэтому не все системы поддерживают редирект. Это может привести к ситуациям, когда посетители остаются на оригинальном сайте и не перенаправляются на новую страницу.

    Такие недостатки делают использование серверных редиректов более предпочтительным. Поэтому клиентские решения должны применяться только тогда, когда перенаправления домена на стороне сервера невозможно из-за технических препятствий.

    Серверные редиректы

    В большинстве случаев серверные перенаправления домена выполняются через конфигурационный файл .htaccess или PHP скрипт. Преимущество этих методов состоит в том, что можно индивидуально определить, какой код состояния HTTP должен быть выведен на экран пользовательскому агенту. Это позволяет веб-мастерам помечать перенаправления, как постоянные или временные.

    Ниже приведены актуальные коды состояния HTTP 301 и 302:

    • redirect 301 HTML – перемещен навсегда: запрашиваемый ресурс теперь постоянно доступен по новому URL. Старый URL с этого момента становится недействительным;
    • 302 – перемещен временно: запрашиваемый ресурс доступен по новому URL. При этом исходный URL по-прежнему сохраняет свою актуальность.

    Если код состояния HTTP не определен явно, сервер передает код состояния 302 во время редиректа. Это не всегда необходимо и рекомендуется вручную вводить нужный код состояния при каждой переадресации, так как это позволяет снизить вероятность ошибки индексации, как в ситуации взлома URL. В отличие от редиректа 301, код состояния 302 сообщает поисковым роботам, что первоначальный URL должен оставаться индексируемым. Предназначенный для постоянной работы адрес редиректа конкурирует с адресом, указанным в индексе поисковой системы.

    Перенаправление через .htaccess

    .htaccess представляет собой конфигурационный файл на сервере Apache, используемый для перезаписи центральной конфигурации на уровне каталогов. Этот файл позволяет администраторам сайта выполнять специфичные настройки каталога для доменов и их подкаталогов. Одна из функций файла .htaccess включает в себя серверные перенаправления отдельных адресов на другие URL.

    После того, как файл .htaccess со следующим кодом помещается в основные каталоги, запросы на исходный домен перенаправляются серверной стороной на домен www.example.com ‘‘:

    Строка кода начинается с redirect 301 HTML и определяет код состояния HTTP, который будет передан сервером. Далее следует путь к контенту, который должен быть перенаправлен. В данном случае будет перенаправлено все содержимое. В заключении целевой URL перенаправляется на URL пользовательского агента: ‘http://www.example.com’.

    Этот метод позволяет перенаправить отдельные файлы. Следующий код показывает редирект с одного сайта на другой:

    .htaccess перенаправление из подкаталога на другой URL

    Вот как выглядит постоянное перенаправление на сервере Apache с активным модулем mod_rewrite:

    В первой строке кода модуль mod_rewrite сервера Apache активируется с помощью команды ‘RewriteEngine On’. После этого указывается «RewriteRule» с путем к файлу перенаправления и адресом назначения. Символы ^ и $ обозначают начало и конец пути, а L означает последнее правило для соответствующего запроса. R = 301 пересылает статус HTTP 301.

    При настройке редиректа с помощью .htaccess ошибочные записи могут серьезно повлиять на работу сайта. Учитывая, что эти изменения вступают в силу сразу после сохранения файла .htaccess, нужно тщательно проверять соответствующие конфигурации.

    Перенаправления с помощью PHP

    HTML redirect на другую страницу может также быть выполнен PHP скриптом (например, в index.php). Следующий код отображает постоянное перенаправление к целевому URL ‘www.example.com’:

    При передаче через PHP скрипт код состояния HTTP определяется с помощью функции «header» во второй строке кода. В этом примере должен быть выполнен постоянный 301 редирект. Учитывая, что серверные перенаправления обычно выполняются на временной основе, то для постоянного редиректа нужно явно указать код состояния 301. Адрес назначения перенаправления также прописан в ‘header‘.

    В примере перенаправление происходит на ‘http://www.example.com‘. Функция ‘exit‘ в четвертой строке кода заканчивает сценарий и препятствует выполнению следующей строки. Чтобы редиректы работали через PHP скрипт, блок кода должен быть расположен в начале HTML страницы. Это препятствует передаче сервером содержимого HTML на страницу перенаправления.

    Клиентские редиректы

    Если выполнение перенаправления на стороне сервера невозможно по техническим причинам, то можно использовать клиентское решение. Для этого применяется HTML метатег «refresh» и JavaScript. Недостатком перенаправления на стороне клиента является то, что серверы не передают коды состояния HTTP запрашивающим браузерам или поисковым роботам.

    Более того, перенаправления на стороне клиента не поддерживаются всеми пользовательскими агентами, а это значит, есть риск того, что не все посетители сайта будут перенаправлены.

    Redirect HTML index на стороне клиента оказывают негативное влияние на поисковый индекс. С клиентскими редиректами 301 не происходит явного исключения из индексации через код состояния HTTP. Это может привести к перенаправлению доменов, конкурирующих с доменами назначения, когда речь заходит о поисковых запросах, связанных с рейтингом. В отличие от серверных редиректов, которые остаются невидимыми для пользователей, клиентские всегда сопровождаются задержками.

    Переадресация с помощью HTML метатега refresh

    HTML перенаправления реализуются через метатеги с атрибутом ‘http-equiv’. Для этого нужен простой HTML-файл и соответствующий тег в заголовке для создания перенаправления. Чтобы посетители получали информацию о редиректе, в HTML-документе должно быть установлено соответствующее уведомление: «Пожалуйста, подождите. Вы будете перенаправлены … ‘. Простое перенаправление с помощью refresh выглядит следующим образом:

    Клиенту будет предложено перенаправление на новую страницу через метатег http-equiv = «refresh». То, как это происходит, определяется в атрибуте ‘content’. Приведенный выше пример перенаправляет пользователей на домен ‘www.example.com‘ через десять секунд.

    Переадресация с помощью JavaScript

    JavaScript предлагает простую возможность HTML redirect домена на стороне клиента. Но JavaScript поддерживается не всеми браузерами из-за соображений безопасности. Использование данного решения также может создать проблемы для поисковых роботов и пользователей с активными дополнениями NoScript. Вот как выглядит код перенаправления с помощью JavaScript:

    Самое главное здесь это третья строка кода. Объект ‘window.location‘ используется, чтобы сделать ссылку на текущий адрес сайта. Команда ‘replace‘ инструктирует браузер направить пользователя к домену назначения (‘www.example.com‘).

    Перевод статьи “Domain redirects via .htaccess, PHP, HTML, and JavaScript” был подготовлен дружной командой проекта Сайтостроение от А до Я.

www.internet-technologies.ru

Правила приведены для сервера Apache. В правилах: %{QUERY_STRING} — обозначает фрагмент URL-адреса после знака вопроса (задания значений CGI-параметров). Срабатывание того или иного правила для редиректа определяется тем, попадает URL-адрес страницы под это правило или нет. О значении тех или иных обозначений (^, $, NC и т.д.) см. памятку в конце страницы.

Ниже даны наиболее используемые правила настройки файла .htaccess для 301 редиректа. Лучше размещать все правила после двух строк:

Options +FollowSymLinks RewriteEngine On
RewriteCond %{HTTP_HOST} ^site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L] 
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC] RewriteRule ^(.*)$ http://site.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 %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=111$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [R=301,L]

Если один (или несколько) из GET параметров не задан(ы) или может иметь произвольное значение (в нашем примере это SECTION_ID), можно использовать следующий код:

RewriteCond %{QUERY_STRING} ^IBLOCK_ID=1&SECTION_ID=(.*)$ [NC] RewriteRule ^dir/index.php$ /new/sef/? [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 %{HTTP_HOST} ^old-site.ru$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

И для домена в зоне РФ:

RewriteCond %{HTTP_HOST} ^xn-....xn--p1ai$ [NC] RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.site.ru/$1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^si-te.ru$ [NC] 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

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

DirectoryIndex index.html index.php index.htm index.shtml
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/ RewriteRule ^index.php$ http://www.site.ru/ [R=301,L]
RewriteCond %{HTTP_HOST} ^test.site.ru$ [NC] RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} [R=301,NC,L,QSA] 
RewriteRule [^abc]/unique-file.html /unique-file.html [R=301,L] 

Код позволяет поставить 301-редирект со всех папок вида http://site.ruuniqe-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/

Внимание, важно, чтобы код ответа сервера для 404 ошибки, был именно 404. Путь к файлу указывается с помощью следующей строчки:

ErrorDocument 404 /404-for-me.php
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$  RewriteRule ^(.*) http://site.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^([a-z0-9_-]+).site.com$  RewriteCond %{HTTP_HOST} !=one.site.com [NC] RewriteRule ^(.*) http://site.com/$1 [R=301,L]
  • Если требуется настроить редирект только для некоторых 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://mobile.site.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-search.site.ru/ [L,R=301]

Переадресация с www.site.ru/component/content/?view=featured на www.site.ru/

RewriteCond %{QUERY_STRING} ^view=featured$ [NC] RewriteRule ^component/content/?$ /? [R=301,L]

Переадресация с www.site.ru/index.php?idc=4&marea=6 на www.site.ru/

RewriteCond %{QUERY_STRING} ^idc=4&marea=6$ [NC] RewriteRule ^index.php$ /? [R=301,L] 
. — Точка заменяет произвольный символ. [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] — то же самое. 
RewriteRule (.*) $1? [R=301,L]

Располагать после: RewriteBase /

Памятка по используемым символам и обозначениям

Строчка RewriteCond — условие выполнения правила RewriteRule. Если условие выполняется, то срабатывает редирект. Правила могут задаваться с помощью регулярных выражений.
Спецсимволы, используемые в правилах и их значения.

^ — спецсимвол начала строки;
$ — спецсимвол конца строки;
! — спецсимвол отрицания;
. — точка, заменяет любой символ, но только один;
() — группировка;
— «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.

Модификаторы используются после обычных, спецсимволов или их групп и позволяют расширить возможности шаблонов для срабатывания правил.

? — символ повторяется 0 или 1 раз.
+ — повторяется от 1 до 65536 раз.
* — повторяется от 0 до 65536 раз.

Флаги, задают доп. опции для используемого правила. Перечисляются в квадратных скобках через запятую, скажем [NC] или [R=301,L].

NC — флаг NoCase, отключающий проверку регистра символов при срабатывании правила.
R — флаг Redirect, производит процесс остановки изменения URL-адреса и возвращает результат. Чаще всего используется значение R=301, но возможны и другие для временных перенаправлений (302, MOVED TEMPORARY).
L — флаг Last, останавливает формирования URL-адреса и строка считается окончательной.

Полезные ссылки:

  • Redirect 301 – теория и практика редиректа, настройка и правила использования

UPD:

RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] 

обратно:

RewriteCond %{SERVER_PORT} ^443$ [OR] RewriteCond %{HTTPS} =on RewriteRule ^(.*)$ http://your_site.com/$1 [R=301,L] 

⇥ Для WordPress:

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]   RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] </IfModule> # END WordPress  

 Источник 

coderhs.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.