Читаем мужчин ucp php redirect. Как сделать редирект. Все виды. Использование метатегов HTML для редиректа
Главная > Программы > Apache
301 редирект - корректная переадресация через htaccess и php headerРедирект 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").
где:
Redirect 301 - это инструкция, говорящая что страница перемещена
/ - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
http://www.you.com/new.htm - новая страница или сайт (не забывайте поставить последний "/", если переадресация идет на сайт).
Чтобы переадресовать только страницу, сохранив PR старой страницы:
Redirect 301 /old/old.htm http://www.you.com/new.htm
где:
/old/old.htm
- путь и имя старой страницы
Аналогичный синтаксис для переадресации сайта:
Redirect Permanent / http://www.you.com/
Пример переадресации каталога:
Redirect Permanent /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 редиректа.
Ставшая классической задача слияния имена сайта с www и без него, решается так:
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite\.com RewriteRule ^(.*)$ http://www.yoursite.com/$1 .или альтернативный синтаксис:
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^domain\.com$ RewriteRule ^(.*)$ http://www.domain.com/$1Обозначение означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).
Редирект старого домена на новый:
Options +FollowSymLinks RewriteEngine on RewriteRule (.*) http://www.newdomain.com/$1Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в.htaccess:
RewriteEngine on RewriteBase / RewriteRule ^rewrite\.htm$ rewrite.htmlДля замены всех.htm файлов.html файлами:
RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.htmlгде 0 - задержка переадресации в секундах, newdomain.com -страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя, на мой взгляд это уже не актуально. Такой редирект не сможет склеить ваши сайты (с www и без) и передать PR, так как игнорируется поисковыми системами. Он возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому ее стоит применять только для страниц, которые не будут индексироваться.
Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout("функция", задержка).
Например, автоматически сделать Click на кнопке "Submit" формы "searchform" через 0.1 сек после загрузки кода:
setTimeout("document.forms["searchform"].Submit.click()", 100);
На кнопку "Submit" можно повесить любое действие, например, открыть новый url в этом окне. Кстати такое редиректы чаще встречаются при организации Дорвеев (DorWay) - браузер Пользователя будет переадресован на другую страницу, а поисковый робот, который "не понимает" JavaScript, будет индексировать эту страницу, недоступную пользователю. На ней дорвейщики размещают текст, напичканный "нужными" ключевыми словами.
Чтобы просто переадресовать на другую страницу можно вставить после один из вариантов кода на JavaScript:
- location="http://www.newdomain.com";
- document.location.href="http://www.newdomain.com";
- window.location.reload("http://www.newdomain.com");
- document.location.replace("http://www.newdomain.com");
- Методы редиректа с.htaccess работают только на Linux серверах, имеющих Apache с включенным модулем Mod-Rewrite.
- Использование.htaccess создает дополнительную нагрузку на сервер Apache, более эффективно прописывать те же команды в его конфигурационном файле hpptd.conf, но, как правило, к нему нет доступа у вебмастера.
- 301 редирект, позволяет сберечь трафик и передать PR страницы для поисковых систем (для Google точно).
- процесс склейки и передачи PR занимает длительное времени - до нескольких месяцев и также зависит от поисковой системы, поэтому не удаляйте старую страницу или сайт, пока не произойдет окончательный перенос.
- некоторые поисковые системы требуют для склейки сайтов дополнительных настроек, например, для Яндекса нужно дополнительно прописывать robots.txt
Заключение. Безопасный способ редиректа старых страниц на новые или старого сайта на новый адрес, с сохранением позиций в поисковых системах, заключается в использование 301 редиректа, который также позволит вам передать старый Page Rank страницы на новый сайт.
Код состояния HTTP (англ. HTTP status code) со статусом 301 Moved Permanently (Перемещено окончательно) свидетельствует о том, что запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка.
Для чего это нужно?В первую очередь, при изменении доменного имени сайта, необходимо оповестить поисковые системы о смене адреса сайта. Во-вторых, для склейки имени сайта с www и без него. В-третьих для быстрой передачи Page Rank на новый сайт.
PHPСпособ первый
Способ второй
Perl
Способ первый
$cgi = new CGI; print $cgi->redirect("http://www.example.com/");
Способ второй
#!/usr/bin/perl -w use strict; print "Status: 301 Moved Permanently\n"; print "Location: http://www.example.com/\n\n"; exit;
ASP.NETСпособ первый
private void Page_Load(object sender, System.EventArgs e) { Response.Status = "301 Moved Permanently"; Response.AddHeader("Location","http://www.example.com"); }
Способ второй (с версии 4.0)
RedirectPermanent("http://www.example.com");
ASP Ruby on Rails def do_something headers["Status"] = "301 Moved Permanently" redirect_to "http://www.example.com/" end ColdFusion Java (JSP) Веб-сервер Apache (.htaccess)Способ первый (mod_alias, Redirect)
Redirect 301 / http://www.example.com
Способ второй (mod_alias, RedirectPermanent)
RedirectPermanent / http://www.example.com
Способ третий (mod_alias, Redirect permanent)
Redirect permanent / http://www.example.com
Способ четвертый (mod_alias, RedirectMatch)
RedirectMatch 301 ^(.*)$ http://www.example.com/
Способ пятый (mod_rewrite)
Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^(.*)$ http://www.example.com/$1
Типы редиректов
Есть несколько типов редиректов, рассмотрите каждый из них в кратце, чтобы определить какой из них вам больше подходит.
Редирект через htaccess
- самый популярный, и довольно простой способ.
Чтобы его сделать,
вам понадобится создать в папке сайта файл с названием.htaccess (обратите внимание, что
название файла начинается с точки, это не опечатка). Если вы используете CMS WordPress или
Joomla, то скорее всего этот файл у вас уже есть, в этом случае вам нужно будет просто
отредактировать его.
Читайте ниже чтобы узнать какие именно инструкции в нем нужно прописать, чтобы создать
перенаправление.
Редирект при помощи PHP - подойдет в том случае, если вы разбираетесь в PHP и знаете структуру своего сайта. Этот вариант подойдет вам, если ваш сайт написан не на CMS. В ином случае лучше используйте редирект через htaccess.
Редирект HTML - если у вас простой HTML сайт и вам нужно сделать перенаправление для одной страницы - это самый простой вариант. Сделать перенаправление для всего сайта этим способом будет трудозатратно, особенно если у вас на сайте больше 10 страниц.
Редирект при помощи JavaScript - этот способ подойдет также в том случае, если у вас простой сайт, либо если нужно сделать редирект для одной - двух страниц, либо для всего сайта в целом.
Редирект при помощи.htaccess файла
Инструкции, которые вы увидите ниже, нужно прописать в файл.htaccess в самое начало.
Redirect / http://new-site.ru/
В этом примере, перенаправление будет происходить на сайт new-site.ru
Redirect /page-1.html /page-2.html
В этом примере,
перенаправление будет происходить со страницы page-1.html на страницу page-2.html.
Обе страницы должны располагаться на одном домене.
Этот вариант подходит для
замены старых страниц сайта на новые.
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.example\.ru
RewriteRule ^(.*)$ http://example.ru/$1
В этом примере, посетители будут перенаправляться с http://www.example.ru на http://example.ru.
Redirect 301 /blog/page-1.html http://example.com/page-2.htm
В этом примере, посетители будут перенаправляться со страницы blog/page-1.html на example.com/page-2.htm .
ErrorDocument 404 /index.html
Пропишите эту строку в.htaccess файле, и тогда все посетители, которым встретится ошибка 404, будут перенаправлены на index.html .
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Пропишите эту строку в.htaccess файле, и тогда все посетители вошедшие на сайт по протоколу HTTP будут перенаправляться на защищенный протокол HTTPS.
Если вы прописываете редирект для WordPress , то обратите внимание на то, что в файле уже есть строка RewriteEngine On. Поэтому сразу под ней вам нужно добавить такие строки
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.com/$1
PHP редирект
В PHP редирект делается так: сервер отправляет заголовки headers браузеру посетителя,
и тот переходит по нужному адресу автоматически.
Стоит отметить важный момент,
отправлять заголовки можно только до вывода другой
информации. То есть они должны отправляться до вывода любой другой информации через
echo
и до отправки кук.
В этом примере, перенаправление будет происходить на сайт http://example.com
Здесь перенаправление будет происходить на http://example.com/page.html
Здесь если посетитель сайта зайдет на страницу blog/post-1.html то он будет перенаправлен на http://example.com/page.html
HTML редирект
Чтобы сделать редирект через HTML, нужно добавить на каждую страницу где он планируется
специальный мета тег. Мета тег прописывается внутри тега
.
На больших сайтах этот метод не удобен, и рекомендуется использовать
редирект через .
В этом примере, перенаправление будет происходить на сайт https://сайт с задержкой в 5 секунд. Если установить значение задержки вместо 5 в 0, то посетитель будет перенаправляться на другой сайт моментально.
С переадресацией (она же - «редирект») сталкивался каждый пользователь интернета. Достаточно просто выбрать в поисковой системе любой сайт из выдачи и поисковая система автоматически перенаправит Вас на сайт. В этой статье мы расскажем о том, какие виды переадресации существуют и как их настроить.
Основные операторы регулярных выражений
Для начала давайте разберемся с основными операторами регулярных выражений (флаги, модификаторы, специальные символы):
Спецсимволы:
- ^ — ограничение слева (начало строки);
- $ — ограничение справа (конец строки);
- . — любой символ;
- () — переменная;
- \ — экранирование (символ после \ считается обычным, а не спецсимволом);
- — диапазон значений;
- ! — спецсимвол отрицания.
Модификаторы:
- ? — символ повторяется 0 или 1 раз;
- + — 1 и более символов (до 65536);
- * — 0 и более символов (до 65536).
Начнем с 301 редиректа в htaccess. Во-первых, он представляет из себя автоматическую переадресацию с одного адреса на другой. Он вполне может применяться в том случае, когда сайт переводится с протокола http на https, когда сайт перенастраивается с «полноразмерных» адресов на ЧПУ (т.е. было https://www.karcher.xyz/content/news/31-01-2017/razdatka , стало https://www.karcher.xyz/ razdatka), а также для «склеивания» страниц-дублей. Во-вторых, 301 редирект сообщает поисковым системам, что «ребята, имеющийся у вас адрес уже не работает, поэтому идите вон туда», а они такие «ОК, учтем». Таким образом, переадресация происходит безболезненно, без потери позиций и ссылочной массы.
Но что будет, если «Ой, да ну нафиг? Буду я еще с переадресациями заморачиваться, только время потеряю!»? Можно сделать и так, НО… история «старой» страницы будет утрачена, а «новая» будет ранжироваться «с нуля». Как следствие - потеря позиций и ссылочной массы (это в лучшем случае).
Варианты применения 301 редиректа:
- Склейка доменов;
- Переезд сайта на другой адрес (может пригодиться при попадании сайта под какие-либо фильтры);
- Для увеличения показателей тИЦ, PR и увеличения трафика при покупке другого домена (настраивается редирект на ресурс, который нуждается в поднятии тИЦ и PR);
- При смене движка сайта (в этом случае настройка 301 редиректов строго обязательна, в противном случае гарантирована полная потеря трафика);
- при переезде с http на https;
- склейка «дублей»
и т.д., всех причин не перечислить.
301 Редирект при смене домена основного сайтаИтак, Вы решили сменить домен. Сразу же даем готовое решение:
- переделываем robots.txt на старом домене. Готовый текст файла:
User-agent: Yandex
Host: newsite.com
- настраиваем 301 редирект для всех страниц сайта (кроме файла robots.txt) с помощью приведенного ниже кода:
RewriteCond %{REQUEST_FILENAME} robots.txt$
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www\.site\.com
301 редирект при смене адреса страницыПостраничный редирект (когда меняется адрес страницы) осуществляется с помощью приведенного ниже кода:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.stokrat\.org$
RewriteRule ^stranica/nastrojka-301-redirekta/$ https://www.сайт/newpage/
Именно этот код используется при «переезде» страниц, например, на ЧПУ.
Настроить редирект с www на домен без www в htaccessУпоминание www. в адресе домена уже давно не является актуальным. Тем не менее сайтов с www. полно. Склеивание доменов с www. и без должно производиться в строго обязательном порядке, т.к. поисковые системы воспринимают эти 2 домена как 2 разных сайта с разными тИЦ, PR, посещаемостью, ссылочной массой и всем остальным. Следовательно, один из них - оригинал, а второй - «самозванец» с «ворованным контентом». Чтобы этого не происходило - домены с www. и без необходимо «склеить» с помощью 301 редиректа. Код настройки приведен ниже.
Код редиректа с www на без www в htaccess выглядит так:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru$
Теперь давайте разберемся с директивами.
RewriteEngine on/off - если выражаться простым человеческим языком - она служит выключателем 301 редиректа.
RewriteCond — в этой директиве прописываются условия для «срабатывания» следующей директивы.
RewriteRule — директива преобразования одного адреса в другой.
Настроить 301 редирект с http на https через htaccessПереезд с http на https многие считают «современным трендом». Однако, на сегодняшний день данная мера является обязательной (хотя формально она таковой не является). И вот настал тот час, когда Вы получили SSL-сертификат, Ваш сайт уже работает и по http и по https. Все что осталось настроить в файле.htaccess 301 редирект с http на https версии страниц сайта. Код для настройки приведен ниже.
RewriteRule ^(.*)$ https://site.ru/$1
А вот код на обратный редирект с https на http. Как видите, отличие всего в 1 символ:
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ http://site.ru/$1
Редирект со страниц index.php, index.htmlПо большей части речь пойдет про склеивание дублей, которых может образовываться огромное количество.
Поскольку в подзаголовке упомянуты index.php и index.html - Вы уже догадались, что с помощью 301 редиректа мы будем избавляться от дублей главной страницы:
Однако, если у главной страницы есть дубль вида site.ru/index.php, вполне вероятно, что и у остальных страниц есть дубли вида site.ru/index.php/page.html (при оригинальном адресе site.ru/page.html ). Это плохо, поэтому также требуется настройка 301 редиректа с помощью приведенного ниже кода:
RewriteRule ^index\.php/(.*)$ /$1
Нередки случаи, когда у главной страницы есть дубль вида
site.ru/main.html , для которого так же необходимо прописывать 301 переадресацию на site.ru :
RewriteEngine On
RewriteCond %{THE_REQUEST} ^{3,9}\ /main\.html\ HTTP/
Либо альтернативный вариант:
Redirect 301 /main.html HYPERLINK "http://site.ru/" http :// site . ru /
А вот теперь рассмотрим обратную ситуацию - когда Вы хотите склеить дубли, настроив переадресацию с site.ru на site.ru/main.html . Сделать это можно с помощью приведенного ниже кода.
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html
RewriteRule ^(.*)/$ /$1.html
Ну а если Вам важно, чтобы адреса всех внутренних страниц отображались без.html на конце, то redirect настраивается вот таким кодом:
RewriteCond %{REQUEST_URI} \.html$
RewriteRule ^(.*)\.html$ /$1
Теперь о том как сделать редирект со страницы на страницу а именно с.htm на страницы.html. Для настройки такой переадресации достаточно добавить в.htaccess следующий код:
RewriteRule ^(.*)\.htm$ $1.html
Редиректы с адресов со слэшами в конце и без нихДля начала рассмотрим еще один вид дублей страниц - страницы вида http://site.xyz/page и http://site.xyz/page/ - кроме слэша в конце, они ничем не отличаются. Настраивать redirect можно и с первой на вторую, и со второй на первую. Рассмотрим оба варианта:
Редирект с http://site.xyz/page на http://site.xyz/page/:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) http://www.site.ru/$1/
Redirect с http://site.xyz/page/ на http://site.xyz/page:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1
Причем абсолютно не важно, будет ли у Вас после редиректа слэш в конце адреса или нет. Главное - чтоб эти адреса были склеены с помощью 301 редиректа.
Редирект на мобильную версию сайтаРазумеется, если Ваш сайт работает на движке WordPress или Joomla, то настроить редирект на мобильную версию сайта можно с помощью плагинов.
Однако, Google является сторонником адаптивного дизайна. Следовательно, выделять отдельный домен/поддомен для мобильной версии не нужно. Т.е. в Google утверждают, что «если есть возможность обойтись без редиректов на мобильную версию - именно так и нужно поступать».
Но что делать, если без таких редиректов все-таки не обойтись?
Можно настроить редирект через файл.htaccess
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml"
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^ http://m.domain.com%{REQUEST_URI}
Настройка мобильного редиректа через PHP
Необходимо воспользоваться специальной библиотекой Mobile Detect, она необходима для того, чтоб распознать, с мобильного устройства пришел пользователь, или со стационарного.
$detect = new Mobile_Detect;
if ($detect->isMobile()) {// код}
if ($detect->isTablet()) {// код}
if ($detect->isiOS()) {// код}
if ($detect->isAndroidOS()) {// код}
Из этого кода становится очевидно, что можно распознать не только компьютер/смартфон/планшет, но и его операционную систему.
JavaScript редирект
С помощью приведенного ниже кода происходит переадресация на мобильный поддомен. Основанием для переадресации служит разрешение экрана - до 480 пикселей в ширину. Именно в ширину, не в высоту.
Способ 2. Настройка редиректа на site.com через.htaccess, вставив вот этот код:
RewriteCond %{QUERY_STRING} ^route=common/home$
RewriteRule ^index\.php$ http://site.com/?
Таким же (а именно - вторым) способом можно настроить редиректы со старых адресов категорий на новые. По умолчанию адреса ссылок в OpenCart выглядят примерно следующим образом:
site.com/index.php?path=83_94_113&route=product/category
На такие ссылки смотреть очень больно, причем в прямом смысле, т.к. глаза реально начинают болеть при виде таких адресов. В том же.htaccess можно настроить редирект на «человеческие» адреса вида site.com/category с помощью такого кода:
RewriteCond %{QUERY_STRING} ^path=83_94_113&route=product/category$
RewriteRule ^index\.php$ http://site.com/new-category?
Но что делать с динамическими адресами, которые из-за привязки к определенной секции имеют вид site.com/katalog?c=okna-pvkh ?
Программисты довольно долго искали решение. «Методом тыка» (точнее - проб и ошибок) решение было найдено. В данном случае происходит редирект на главную страницу сайта:
RewriteCond %{QUERY_STRING} ^c=okna-pvkh$
RewriteRule katalog http://site.com/?
Примечания и ошибкиТеперь поговорим о том, как не допускать ошибок при настройке 301 редиректа:
- Нельзя нарушать последовательность правил переадресации. После настройки редиректа необходимо убедиться, что настройка не дала каких-либо «побочных эффектов». Если нарушить последовательность правил, то ранее настроенные редиректы могут либо прекратить функционировать, либо функционировать неправильно. Противоречий в правилах быть не должно.
- Не стесняйтесь пользоваться официальными мануалами, т.к. у 301 редиректа из-за непростого синтаксиса есть множество особенностей. Упустить какой-то нюанс при настройке - проще простого.
- После очередных «допиливаний» ВСЕГДА проводите полную проверку работоспособности тех правил, которые были внедрены ранее. Настройка без проверки - это не настройка даже «для галочки». Один лишний символ может «обвалить» работу всего сайта, либо заставить его работать неправильно. За другими программистами нам уже не раз приходилось исправлять работу сайта, когда с адреса site.com/oldpage происходит 301 редирект на site.com/newpage , а затем с помощью того же 301 редиректа происходит переадресация обратно на site.com/oldpage и далее «по кругу».
Ну и в заключение приведем несколько примеров, когда применять 301 переадресацию вообще нельзя.
Во-первых, «многоходовки», когда идет череда из нескольких 301 редиректов подряд. Гораздо правильнее настроить редирект сразу на «финишный» адрес.
Во-вторых, если по каким-то причинам есть 2 страницы с дублирующим контентом, но нужно сохранить для пользователей обе.
В-третьих, редиректы «не туда». Т.е. если страница переехала с первого адреса на второй, а при настройке редиректа Вы ошибочно указываете адрес совершенно другой страницы.
В-четвертых, redirect на страницу, которая работает по каким-то причинам очень некорректно. Страница должна работать стабильно и отдавать либо код 200, либо код 404.
В-пятых, редирект файла robots.txt. Это запрещено правилами многих поисковых систем. Более того, многие допускают одну и ту же ошибку - когда настраивают htaccess редирект на https с http://site.xyz/robots.txt на https://site.xyz/robots.txt . Файл robots.txt должен быть доступен по обоим адресам без всяких переадресаций. Ровно то же самое касается и xml-карты сайта.