301 редирект на другой домен htaccess. Постоянная переадресация при изменении URL страниц
Конфигурационный файл .htaccess является конфигом для веб-серверов на Apache. Большинство хостингов работают через этот сервер, поэтому на каждом сайте присутствует этот файл. Вебмастера могут частично управлять его работой внося в него свои изменения. В этой статье мы рассмотрим директивы и правила, которые можно менять в работе сервера.
Самый главный файл .htaccess располагается в корне сайта:
Его действия распространяются на текущий каталог и на все вложенные каталоги. Т.е. у владельцев сайтов есть возможность воздействовать только на работу своего проекта, не мешая работе всего сервера. Если этот файл отсутствует, то его можно создать с помощью любого блокнота. Главное, чтобы название файла было ".htaccess" - без форматов.txt, .doc и т.д.
Через файл .htaccess чаще всего настраивают 301 редиректы на уровне сервера, что сильно ускоряет процесс перехода на новую страницу, т.к. не надо загружать промежуточную страницу. Также здесь прописывается какой файл обрабатывает 404 ошибку .
Чуть ниже мы рассмотрим все распространенные варианты редиректов через .htaccess , а для начала ознакомимся с опциями и правилами.
Чтобы иметь возможность работать с редиректами нужно включить модуль ReWriteEngine . Для этого необходимо прописать две строчки кода (желательно в самом верху файла .htaccess ):
Options +FollowSymLinks RewriteEngine OnРазместите эти строки в самом верху файла .htaccess , чтобы иметь возможность работать с директивами модуля mod_write.
Также на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).
1. Правила Redirect, RewriteRule и RewriteCond 1.1. Директива RedirectСинтаксис Redirect :
Redirect /откуда http://куда_полный_адресRedirect устанавливает прямой редирект с одной страницы на другую.
В status пишут код редиректа. Является необязательным параметром. Чаще всего пишут 301, что сигнализирует о постоянном смене адреса страницы.
Важно, чтобы страница "откуда" была прописана в формате без указания полного адреса сайта, но с указанием полного относительного адреса URL начиная со слэша "/" (т.е. с корня сайта). Страницу куда идет редирект нужно писать полностью, т.е. абсолютный адрес страницы URL (т.е. с названием домена и протокола http или https).
Например
Redirect 301 /oldpage.php http://site/newpage.phpМожно также писать по другому
RedirectPermanent 301 /oldpage.php http://site/newpage.php или Redirect permanent 301 /oldpage.php http://site/newpage.php 1.2. Директива RewriteRuleДиректива RewriteRule устанавливает правила перехода. Синтаксис следующий:
RewriteRule Шаблон Подстановка [коды]- При внешнем редиректе меняется урл адреса в строке браузера - " "
- При внутреннем - не меняет урл адреса в строке браузера - " " или "[L] "
Директива RewriteCond определяет условия при котором выполняется правила в RewriteRule.
RewriteCond Сравниваемая_Строка УсловиеНапример, этими условиями могут быть браузер пользователя, IP-адрес , заголовок и т.д.
1.4. Директива RedirectMatchДиректива RedirectMatch аналогична Redirect с той лишь разницей, что позволяет записывать регулярные выражения.
RedirectMatch Откуда Куда 2. Примеры 301 редиректов в.htaccessМы уже рассматривали множество примеров с редиректом по .htaccess в статьях:
- Смена адреса сайта - редирект со старого домена на новый
Здесь мы дополним варианты редиректов, которых еще не было.
2.1. Редирект с одной страницы на другуюРедирект с site.ru/cat/oldpage на site.ru/newpage.html
RewriteRule ^cat/oldpage.* /newpage.htmlИли второй вариант:
Redirect 301 /cat/oldpage http://www.site.com/newpage.php 2.2. Редирект со всех файлов.htm на.html RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)\.htm$ $1.htmlИли второй вариант:
RewriteRule ^(.*)\.htm$ $1.html 2.3. Редирект всего каталога на другую страницуС любой страницы в каталоге и подкаталогах /old/ будет происходит редирект на /new.php
RewriteRule ^old(.*)$ /new.php 2.4. Удаление лишних слэшей в адресе URLНапример, страница /catalog///stranica.html доступна и открывается. Чтобы избежать такой ситуации и не плодить бесконечное число дублей следует записать следующий редирект
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$ RewriteRule . %1/%2 2.5. Реврайт без редиректаМожно загрузить другую страницу без смены адреса страницы URL. Например, загрузим страницу /news.html , а в адресной строке будет отображаться адрес /news/happy
RewriteRule ^news/happy.* /news.html [L] 2.6. Простановка замыкающего слеша в конце адреса главной страницаНапример, многие сервера работают так, что последний слэш не пишется в URL. Например, http://site.ru . Ниже приведенный код решают это проблему: сайт будет открывать по http://site.ru/
RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ 2.7. Удаляем директорию каталога из URLНапример для редиректа со страницы site.com/directoriya/stranica.html на site.com/stranica.html нужно прописать следующее:
RewriteRule ^directoriya/(.+)$ http://site.com/$1Или второй вариант:
RewriteCond %{DOCUMENT_ROOT}/directoriya/$1 -f RewriteRule ^(.*)$ directoriya/$1 2.8. Редирект GET параметровНапример, сделать редирект со страницы /?act=page&id=2 на /page-2/
RewriteCond %{QUERY_STRING} act=page RewriteCond %{QUERY_STRING} id=(\d+) RewriteRule .* /page/%1/? ] 2.9. Редирект на мобильную версию сайта m.site.ruВ данном примере сначала проверяется факт того, что пользователь открыл сайт с мобильного устройства {HTTP_USER_AGENT} , далее происходит замена адреса сайта на m.URL
RewriteCond %{HTTP_HOST} ^(.*)$ RewriteCond %{HTTP_USER_AGENT} (?i:midp|samsung|nokia|j2me|avant|docomo|novarra|palmos|palmsource|opwv|chtml|pda|mmp|blackberry|mib|symbian|wireless|nokia|hand|mobi|phone|cdm|upb|audio|SIE|SEC|samsung|HTC|mot-|mitsu|sagem|sony|alcatel|lg|eric|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|dddi|moto|iphone|android) RewriteRule ^$ http://m.%1 2.10. Редирект с поддоменаНапример, выполним редирект с любой страницы поддомена poddomen.site.ru на основной домен site.ru
RewriteCond %{HTTP_HOST} ^poddomen.site.ru$ RewriteRule ^(.*)$ http://site.ru%{REQUEST_URI} 3.Другие примеры с htaccess 3.1. Запретить IP-адрес и браузерЗапретим открывать сайт для пользователя с браузера IE с IP-адресом 172.111.222.55
RewriteCond %{HTTP_USER_AGENT} MSIE RewriteCond %{REMOTE_ADDR} ^172\.111\.222\.55$ RewriteRule ^.*$ - [F] 3.2. Запретить конкретный файлЗапретим для всех файл disable_file.html :
deny from all 3.3. Разрешить доступ с одного ipДоступ будет разрешен только с одного ip-адреса 172.111.222.55
order deny,allow deny from all allow from 172.111.222.55 3.4. Запретить доступ с разных ipЗапретить доступ к сайту с нескольких ip-адреса 172.112.222.55, 172.113.222.55, 172.114.*.*
order deny,allow deny from all deny from 172.112.222.55 deny from 172.113.222.55 deny 172.114.*.* 3.5. Редирект в URL с больших символов на маленькиеВсе большие буквы в адресе URL будут переведены на маленькие.
RewriteRule - RewriteRule ! - RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 RewriteRule - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1Всем-всем привет!
Темой прошлого — . Я кратко рассказал о его самых важных моментах и упомянул несколько функций, которые этот самый файл и выполняет. Одной из таких функций является автоматическое перенаправление посетителя с одного URL на другой, ее еще называют 301 редирект.
Что такое 301 редирект?Как я уже сказал, 301 редирект — это автоматическое перенаправление, которое позволяет перенаправить посетителя или поискового робота с одной страницы сайта на другую или с одного домена на другой. При всем при этом, все, так называемые, пузомерки ( , вес страницы) передаются тому URL, на который происходит редирект.
Таким образом, мы получаем настоящую палочку-выручалочку при переезде сайта на другой домен и других ситуациях, о которых поговорим ниже. При этом мы практически ничего не потеряем.
Пример. Раньше блог Context-UP находился по URL: http://blog.сайт (среди Вас, наверное, есть те кто застал эти времена), затем мне захотелось, чтобы сайт находился на домене второго уровня, то есть . Для осуществления своего желания мне пришлось перенести все содержимое блога в другой каталог (папку) на хостинге, затем в панели , а , указать новый домен, чтобы роботы начали индексировать новый адрес блога. Только после всего этого, я настроил редирект в..
Теперь я надеюсь, Вы поняли, что такое 301 редирект.
Как настроить 301 редирект через htaccess?Существует несколько способов осуществления перенаправления, но самый безопасный и простой — редирект 301 в.htaccess.
Итак, для того, чтобы файл и перенаправление, соответственно, работали, необходимо активировать, так называемые, модули. Для нашей цели можно использовать два:
Наиболее предпочтительным является первый вариант, так как при его использовании Вам не нужно будет прописывать каждый URL-страницы отдельно, а достаточно только использовать специальные команды (они ниже), благодаря которым и будет происходить редирект.
Мы, то есть простые клиенты хостинг-провайдеров, способны только активировать данный модуль для своего каталога с сайтом через файл.htaccess. Делается это просто, достаточно ввести в ранее упомянутый файл строчку:
RewriteEngine On
Работать данный модуль будет только в том случае, если он подключен в веб-сервере Apache. Поэтому уточните данный момент у администраторов.
В рамках этого урока, я хочу разобрать несколько ситуаций, в которых нам понадобится настроить 301 редирект:
Пойдем по порядку.
Переезд на другой доменВ том случае, если Вы решили переехать на другой домен, то Вам нужно прописать в файле дополнительной конфигурации.htaccess следующую команду:
RewriteEngine On RewriteCond %{HTTP_HOST} old-domen.ru RewriteRule (.*) http: //new-domen.ru/$1
301 редирект с www на URL без www и наоборотПоисковый робот — вещь сложная, поэтому при работе с сайтом, вебмастеру необходимо учитывать множество нюансов. Как пример, для поисковой машины сайт, который доступен по адресу с www (www.site.ru) и без тридаблю (site.ru), делится на два совершенно одинаковых, дублирующих друг друга, веб-ресурса.
По этой причине, любой сайт должен быть доступен только по одному адресу: либо с www, либо без. Иначе позиции сайта не будут расти.
Редирект с www.site.ru на site.ru:
Редирект с site.ru на www.site.ru:
RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) RewriteRule ^(.*)$ http://%1/$1
С протокола http на httpsИспользуйте данный код для редиректа на безопасный протокол https:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https: //%{HTTP_HOST}%{REQUEST_URI}
С одной страницы сайта на другуюОчень часто бывает такое, что нужно перенаправить посетителей сайта и поискового робота с одной страницы на другую. В таком случае в htaccess достаточно прописать такой код:
Redirect 301 /stranica1..html
В одно время мне понадобилось сделать такой 301 редирект со страницы, которая генерируется CMS WordPress, на главную, так как первая дублировала то, что было на второй.
С index.html или index.php на корень (слеш)Изначально, практически на всех сайтах главная страница доступна по двум URL: http://site.ru/index.php и http://site.ru/. Это не правильно, так как получается дублирование контента главной страницы и ПС начнут пессимизировать сайт в выдаче (намеренно опускать сайт вниз).
Чтобы такого не было, нужно прописать следующее:
Если Вы хотите сделать редирект с index.html
RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http: //site/
Если Вы хотите сделать редирект с index.php
RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http: //site/
Используйте данный материал, как шпаргалку, вдруг Вам понадобится. Достаточно просто скопировать нужный код и вставить его в.htaccess.
Ну а на этом все, дорогие друзья!
Не забывайте подписываться на обновления блога и делиться ссылками на уроки в социальных сетях.
До скорых встреч!
Предыдущая статьяСледующая статья
301-ая ошибка (301 Permament Redirect), возвращаемая при обращении к определенному адресу страницы, означает, что сайт был на постоянной основе перенесен на новый адрес, также указанный в HTTP заголовке. Как пользователи, зашедшие через браузер, так и поисковые боты будут перенаправляться по новому адресу, при этом, для поисковиков все свойства старого адреса (страницы) будут переданы новому URL . При 301 редиректе произойдет склейка старого и нового адресов: параметры вроде PageRank и тИЦ, а также вес страницы и ссылочный вес старого адреса будет передан новому URL .
Редирект с номером ошибки 301 (moved permanently) это наилучший способ сохранить рейтинг сайта в поисковых системах при переносе его на новый домен или смене системы управления контентом. Переадресацию можно выполнить несколькими способами, в зависимости от установленного программного обеспечения.
301 редирект в.htaccessПри использовании апача (apache) на сервере, переадресацию можно просто выполнить с помощью файла.htaccess, однако, при этом, не забыть включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования реврайта) в php.ini.
Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias
Недостатком данного способа является то, что все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно. Также можно использовать RedirectPermanent для аналогичных целей.
Редирект с помощью директивы RedirectMatch
Этот редирект подобен предыдущему, за исключением того, что можно задавать регулярное выражение для старых URL адресов. Допустим, при смене движка с PHP на ASP , можно старые адреса перенаправить следующим образом:
RedirectMatch /(.*).php$ /$1.aspx
Редирект с помощью директивы RewriteRule модуля mod_rewrite
Для использования директивы RewriteRule необходимо удостовериться, что в httpd.conf подключен модуль mod_rewrite, а также влючена опция FollowSymLinks. Использование реврайт модуля дает много возможностей для перенаправления страниц на новые адреса.
Перенаправление домена с www на не-www
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)
RewriteRule ^(.*)$ http://%1/$1
или альтернативный, более понятный синтаксис
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain.com$
RewriteRule ^(.*)$ http://domain.com/$1
Редирект запросов с не-www на домен с www префиксом
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://www.domain.com/$1
или же альтернативный вариант
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.(.*)
RewriteRule ^(.*)$ http://www.%1/$1
Редирект запросов можно осуществлять также с помощью скриптов, отправляя клиенту необходимые заголовки.
PHP редирект
ASP редирект
ASP .NET редирект
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(“Location”,“http://www.new-url.com”);
}
ColdFusion редирект
JSP (Java) редирект
CGI PERL
$q = new CGI
;
print $q->redirect(“http://www.new-url.com/”);
Ruby on Rails
def old_action
headers[“Status”] = “301 Moved Permanently”
redirect_to “http://www.new-url.com/”
end
Про 301 редирект уже, наверное, сказано и пересказано множество раз в блогах, форумах и т.п. Но, как оказывается, не до всех эта информация вовремя доходит (тут я как бы намекаю на себя:). За более чем 3 года в сети я слышал про 301 редирект множество раз, иногда даже собирался его «попробовать», но давайте посмотрим фактам в лицо — так этого и не сделал. А зря! Все началось достаточно прозаически — у меня есть один сайт, который постоянно «колбасит» в плане индексации поисковиками. Вроде и ссылки там есть, и контент нормальный, а он все ни в какую не хочет стабильно работать. У меня уже почти закончились варианты подобного поведения, но тут я вспомнил про основы основ SEO и вообще продвижения — 301 редирект.
Беглый опрос в твиттере показал, что реально я чуть ли не один «забиваю» на этот важный момент. Большинство единогласно ответило, что в обязательном порядке устанавливает 301 редирект сразу при создании сайта. Более того, тут мне недавно попросили по разработке сайта добавить этот же самый 301 редирект для них, поскольку просьба пришла от продвигающей и конторы. Учитывая все эти моменты и «намеки судьбы» я понял 301 редиректу быть!
Зачем вообще нужен 301 редирект ? — спросите вы — есть несколько ситуаций в которых его можно применить:
Вообще 301 редирект нужен как для пользователей, так и для поисковых роботов — позволяет сориентировать тех и других, что есть новый сайт, домен, страница и без лишних вопросов переадресовывает их туда. Кроме того 301 редирект произведет склейку показателей сайтов и позволит не потерять позиции в поисковых системах.
Как сделать 301 редиректРешений для этой задачи есть множество, все зависит от того какими техническими средствами обладает ваш хостинг. Также в интернете есть много статей по 301 редиректу, которые можно почитать, я приведу лишь несколько, на мой взгляд, самых типичных ситуаций.
Простой редирект
Производится в файле.htaccess или httpd.conf для Apache. Самый простой вариант простого 301 редиректа для переадресации на новый домен выглядит следующим образом:
Redirect 301 /site1/page1.htm http://www.site2.com/page2.htm
Вот еще парочка примеров простого 301 редиректа:
Redirect permanent /test http://www.test.com/ Redirect permanent / http://enter.test.com/
Здесь при попадании пользователя или робота в директорию test он перенаправится на www.test.com, все остальные попадут на enter.test.com. Для этого 301 редиректа на хостинге должны быть включены модули mod_alias (для поддержки Redirect, RedirectPermanent и RedirectMatch).
301 редирект с помощью mod_rewrite в.htaccess
С модулем mod_rewrite вы сталкивались достаточно часто даже не подозревая этого. В частности речь идет про постоянные ссылки (permalinks) как полезный инструмент в seo оптимизации wordpress. Если в админке настроите эти самые ссылки и после этого зайдете в файл.htaccess, то обнаружите там целый ряд правил для переадресации через директиву RewriteRule. Кроме того нужно проверить чтобы была подключена опция FollowSymLinks.
Перенаправление домена с www на без-www
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.domain\.com$ RewriteRule ^(.*)$ http://domain.com/$1
Редирект запросов без-www на домен с www префиксом
Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.(.*) RewriteRule ^(.*)$ http://www.%1/$1
Вообще использование www в названии сайта само по себе устарело, но иногда до сих пор встречается. Если вы создаете новый сайт, то конечно сразу указываете везде без www, но если получили «готовый продукт», то нужно смотреть как домен отображается в выдаче Google и Яндекс — такой редитект и оставляете дабы ничего кардинально не менять.
301 редирект старого домена на новый:
RewriteEngine on RewriteBase / RewriteRule ^rewrite\.htm$ rewrite.html
Для замены всех.htm файлов.html файлами:
HTTP/1.1 301 Moved Permanently Location: http://www.newdomain.ru/newdir/newpage.htm
Для этого, например, в PHP используем:
Данный код лучше всего вставлять в начало PHP скрипта чтобы до него ничего не выводилось (echo или print). За пояснение спасибо автору этой статьи где также найдете информацию про установку редиректа на ASP, ColdFusion и т.п., просто с php самый популярный вариант.
Примечания по 301 редиректу
Напоследок пару моментов по 301 редиректу, которые нужно помнить и с которым я так или иначе столкнулся:
- Во-первых, последовательность правил редиректа учитывается. Так что если какое-то правило не выполняется, проверьте нет ли других редиректов и не мешают ли они.
- Во-вторых, помнить синтаксис и все особенности 301 редиректа достаточно сложно, поэтому иногда здорово помогает логика и перебор некоторых вариантов:) Хотя, конечно, лучше читать официальную документацию.
- В-третьих, после внедрения 301 редиректа обязательно проверьте правила на работоспособность, зайдите не только на главную, но и пройдитесь по разделам, страницам сайта дабы потом не было проблем с этим.
Если у вас есть что добавить по 301 редиректу — пишите:)
P.S. Постовой. В наше время каждый день появляется множество интересных интернет проектов. Хотите знать все про стартапы тогда читайте новый увлекательный блог StartupWay.
После аудита и оптимизации веб-проекта следует комплексная раскрутка сайтов в поисковых системах Google и Яндекс.
Если вы хотите правильно настраивать 301 редирект на своем сайте, то SeoProfy подготовили пошаговое руководство, в котором рассказываются и показываются все детали и нюансы.
Руководство по 301-му редиректу состоит из двух частей:
- Статья с примерами кода и само руководство (если вам сразу нужен пример кода, то лучше сразу пролистать инфографику)
- Наглядная детальная инфографика
301 редирект важен для поискового продвижения и в данном руководстве вы найдете ответы на самые основные вопросы как правильно применять редирект для разных ситуаций.
Что такое редирект?
Редирект - это способ перенаправить пользователей и поисковых систем на другой URL отличный от того, который они первоначально запросили. Ниже приведены описания некоторых из наиболее часто используемых видов перенаправления.
301 Moved Permanently
301 редирект является постоянным редиректом, который передает около 90-99% ссылочного веса. Данный редирект указывает, что страница перемещена по новому адресу и старый url следует считать устаревшим.
302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0)
302 редирект – временный редирект. Данный редирект передает 0% от ссылочного веса и, в большинстве случаев, не должен использоваться. На данный момент интернет работает по протоколу HTTP, который и определяет, как обрабатывать URL-адреса. В двух версиях этого протокола этот ответ сервера имеет разный статус ответа:
HTTP 1.0: 302 ответ сервера это «Moved Temporarily » – текущий документ временно перемещен на другой URL.
HTTP 1.1: произошло изменение ответа сервера на «Found» – текущий документ найден.
307 Moved Temporarily (HTTP 1.1 Only)
307 редирект в протоколе HTTP 1.1 стал приемником 302 редиректа. В то время, как основные поисковые боты, начнут рассматривать его как аналог 302, для почти всех случаев лучше всего использовать 301. Исключением из этого правила является, когда контент действительно переехал только временно (например, во время технического обслуживания) и поисковые системы уже понимают, что ваш сервер совместим с HTTP 1.1. Но, так как это практически невозможно определить, действительно ли поисковые системы поняли, что ваш сервер совместим с этим новым протоколом, то лучше использовать 302 редирект для контента, который был временно перемещен.
Другие виды редиректов
Существуют также и другие виды редиректов: Meta Refresh или с помощью javascript – которые выполняются на уровне страницы, а не на уровне сервера. Вот как выглядит типичный редирект Meta Refresh:
Но, данные редиректы желательно использовать крайне редко, так как ими очень любят злоупотреблять спамеры и дорвейщики. Кроме этого, при использовании этих редиректов ссылочный вес почти не передается.
Примеры использования
Канонизация домена сайта или как склеить домен?
Чтобы склеить домен с www на без www:
RewriteCond %{HTTP_HOST} ^www.site\.com$
RewriteRule ^(.*)$ http://site.com/$1
Для склейки с без www на с www:
RewriteCond %{HTTP_HOST} ^site\.com$
Для того чтобы правильно выбрать на какой из вариантов склеивать, желательно посмотреть:
Как из этих вариантов больше находиться в топе
- для какого из вариантов больше страниц в индексе
Канонизация слеша в конце урла
При проектирование сайта важно определиться с одним форматом использование слеша в конце урла, так как для поисковых систем 2 урла вида:
Http://www.site.com/cat1/
Http://www.site.com/cat1
являются разными. Поэтому, после того как вы определились, как именно у вас будет на сайте, дальше необходимо прописать следующие редиректы
Для того чтобы удалить слэш в конце:
RewriteCond %{HTTP_HOST} (.*)
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.*)(/)$ $1
Для того чтобы добавить слэш в конец адресной строки:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/
Редирект одной страницы на другую страницу:
Redirect 301 /oldpage.html http://www.site.com/newpage.html
Редирект для дублей главной страницы
Этот код гарантирует, что любой адрес домашней страницы, который включает несколько версий прямых ссылок имени страницы, например, default.htm или index.html, будет перенаправлен на каноническую главную страницу, http://www.site.com:
RewriteCond %{THE_REQUEST} ^{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://www.site.com/$1
Редирект каталога
Если структура каталога у вас отображается в url-ле, то если вы делаете перекаталогизацию у вас соответственно будут изменяться и url. В таком случае необходимо прописать следующий редирект:
RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2
Но, если урл старого каталога начинается сразу после домена: www.site.com/old-catalog/, то необходимо воспользоваться следующим кодом
RewriteRule old-catalog /(.*) / old-catalog /$1
Редирект при смене расширение файлов
Если вы вдруг переехали на другую платформу или CMS и при этом у url-ов изменились только расширение, то в этой случае вам поможет вот такой редирект:
RedirectMatch 301 (.*)\.php$ http://www.site.com$1.html
Примеры использования для защиты сайта от множественных дублей страниц
Редирект с разных доменов и субдоменов
Если вы купили несколько доменов в разных доменных зонах или разрабатывали новый сайт и повесили его на субдомен, а этот субдомен забыли закрыть от индексации, то необходимо сделать редирект на основной домен:
RewriteRule ^(.*)$ http://www.site.com/$1
Таким, образом все домены типа www.site.ru, www.site.net, test.site.com будут переадресовываться на сайт www.site.com.
Как удалить несколько слешей/тире в урле
Иногда «по случайности» в урле могут появится по несколько слешей, например, www.site.com/catalog////page-1.html. В таких необходимо делать 301 редирект на страницу с одним слешер www.site.com/catalog/page-1.html:
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2
Аналогично, можно склеить в урле несколько дефисов в один: с www.site.com/catalog/page-1.html на www.site.com/catalog/page-1.html:
RewriteCond %{REQUEST_URI} ^(.*)--(.*)$
RewriteRule . %1-%2
Как сделать редирект с любого урла на url только в нижнем регистре
Поскольку, поисковыми системами регистр букв учитывается, то при проектировании сайта желательно, чтобы все урлы были в нижнем регистре. Однако, если вы изначально упустили данный момент, то лучше всего воспользоваться следующим кодом для редиректа на уровне php-скрипта:
$lowerURI=strtolower($_SERVER["REQUEST_URI"]);
if($_SERVER["REQUEST_URI"]!=$lowerURI)
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER["HTTP_HOST"] . $lowerURI);
exit();
}
Как переехать на новый домен? Оптимальная стратегия 301 редиректа
Оптимальной стратегией переезда на новый домен учитывая пожелания 2-ух основных поисковых систем рунета Yandex и Google это:
Постраничный 301 редирект со старого сайта на новый.
- при этом для файла robots.txt редирект не делаем, а прописываем в нем директиву Host на новый домен.
Тогда код для настройки редиректа на старом сайте может иметь следующий вид:
RewriteCond %{REQUEST_FILENAME} robots.txt$
RewriteRule ^([^/]+) $1 [L]
RewriteCond %{HTTP_HOST} !^www\.site\.com
RewriteRule ^(.*)$ http://www.site.com/$1
а файл robots.txt для старого сайта:
User-agent: Yandex
Disallow:
Host: newsite.com
Генерация 301 редиректов
Если вы не очень технически подкованы, то можно воспользоваться сервисами генерации базовых редиректов:
На таких сервисах можно только подставлять собственные данные и сразу получать готовый код для редиректов между доменами, директориями или урлами.
Как проверить 301 редирект
После каждого изменение логики работы 301 редиректа необходимо проверять работоспособность сайта:
Вообще ли работает сайт: зайти на главную страницу)
Походить по основным разделам и страницам сайта
Также для более тщательной проверки отработки редиректов можно использовать следующие сервисы:
Как и когда лучше использовать 301 редирект vs Canonical
Хотя есть некоторые нюансы, Google предоставляет некоторые четкие правила, для того чтобы он понимал, что именно мы хотим сказать. В очень простой ситуации вот, вот как понимают данные инструкции поисковые системы:
301 - Эй, Поисковики: моя страница уже не здесь и она навсегда переехала на новую страницу. Пожалуйста, удалите старую страницу из индекса и передайте её вес на новую страницу.
Canonical - Эй, Поисковики (так для большинства поисковых систем): у меня есть несколько версий этой страницы (или содержания), пожалуйста, индексируйте только ту версию страницы, на которую стоит canonical. Я буду держать другие страницы доступными для людей, чтобы они могли их видеть, но, Поисковик, не включай их в свой индекс и пожалуйста, передайте вес на мою предпочтительную страницу.
Когда лучше использовать 301 редирект
По умолчанию - это предпочтительный метод
Для страниц: если страница навсегда переехала или была заменена на новый адрес
Для доменов: если сайт переехал на новый домен (продажа сайта, ребрендинг и т.д.)
Для 404 страниц и контентом, который потерял свою актуальность (при условии соответствующего содержания). Например, если удален товар из определенного каталога, то можно сделать редирект на похожий товар, или на url-категории к которой пренадлежал данный товар.
Когда лучше использовать rel= «canonical»?
Когда 301 редиректы не могут быть реализованы, или их внедрение займет слишком много времени
Страницы с несколькими разными url по сути одной страницы (например, сортировки каталога, отслеживания партнерских ссылок, …)
Кросс-доменов, когда оба сайта похожи, но похожий контент нужно оставить на каждом из доменов.
Итого
Ошибки при использовании редиректов
Любой многошаговый редирект. Если есть возможность, то желательно не допускать многошаговых редиректов, чтобы он и быстрее сработал, и передалось максимум ссылочного веса.
Использование не правильного типа редиректов. При выборе типа редиректа необходимо учитывать нюансы каждого из них.
Внедрение внутренних редиректов без смены ссылок на новые адреса. После внедрения всех редиректов у себя на сайте, необходимо проверить, чтобы каждая страница вашего сайта уже ссылалась на новую и внутри сайта у вас не было ссылок на страницы с которых происходит редирект.
Редирект на не релевантные страницы/контент. Редирект всегда желательно проставлять на максимально релевантную страницу: или на похожую страницу, или на ветку каталога/раздела к которому принадлежала данная страница.
Не правильный выбор использования rel=canonical vs 301 редирект. Смотри выше.
Редирект, конечной точкой которого является не 200-я страница. Редирект должен вести на правильно работающую страницу с 200 ответом сервера. Иначе, желательно не сбивать поисковых роботов и отдавать 404 ответ.
Редирект robots.txt. Так как, например, нужно прописывать директиву Host для Яндекса при склейке доменов.
Переходим к просмотру инфографики:
Скачать инфографику.