Простой вариант редиректа (.htaccess/httpd.conf)
Перенаправление всего сайта (включая подкаталоги) на новый сайт или страницу
Code
Redirect 301 / http://www.new_domain.ru/
где:
Redirect 301 - это инструкция, говорящая что страница перемещена
/ - означает, что переадресовываться будет все, с верхнего уровня сайта, включая подкаталоги, будет переадресовано на http://www.new_domain.ru/ - новая страница сайт (символ "/" вконце - обязателен).
Чтобы переадресовать только страницу, сохранив PR старой страницы:
Code
Redirect 301 /old/page.html http://www.mydomain.ru/new/page.html
где:
/old/page.html - путь и имя старой страницы.
http://www.mydomain.ru/new/page.html - адрес новой страницы.
Другой синтаксис для переадресации сайта, но теми же методами:
Code
RedirectPermanent / http://www.new_domain.ru/
Пример переадресации каталога:
Code
RedirectPermanent /old_directory http://www.domain.ru/new_directory/
Например, зашедших по http://www.domain.ru/test (директория test) переадресуем на demo.domain.ru, остальных на login.domain.ru (порядок следования записей важен):
Code
Redirect permanent /test http://demo.domain.ru/
Redirect permanent / http://login.domain.ru/
Использование mod_rewrite
Перенаправление запросов на сайт с www и без него, решается так:
Code
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^medomain\.ru
RewriteRule ^(.*)$ http://www.medomain.ru/$1 [R=permanent,L]
Или немного по другому, а именно:
Code
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^medomain\.ru$ [NC]
RewriteRule ^(.*)$ http://www.medomain.com/$1 [R=301,L]
Обозначение [R=301,L], или, что тоже самое, [R=permanent,L], означает, что сервер должен перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).
[NC] - указывает серверу, что бы регистр набранного домена (в нашем примере - это medomain.ru) не учитывался.
Редирект старого домена на новый:
Code
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://www.newDomain.ru/$1 [R=301,L]
Например, если необходимо чтобы вместо page.html загружался файл page.php, добавьте в .htaccess:
Code
RewriteEngine on
RewriteBase /
RewriteRule ^page\.html$ page.php [R=permanent]
Для замены всех .html файлов .php файлами:
Code
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\.html$ $1.php [R=permanent]
Редирект на PHP
Code
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.mydomain.ru/new/page.html");
exit();
?>
Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Если вы сохраняете файл php в кодировке UTF8, убедитесь, что редактор не вставит в его начало невидимую сигнатуру - BOM. Иначе функция header будет выдавать ошибку и не работать, хотя код PHP будет абсолютно правильным. Это очень распространённая ошибка у неопытных программистов.
Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:
Code
<?
$uri = ltrim($_SERVER['REQUEST_URI'],'/');
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://mydomain.ru/'.$uri);
exit();
?>
А теперь редиректы на других языках
Редирект на ASP:
Code
<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://mydomain.ru"
response.end
%>
Редирект на ASP.NET:
Code
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://mydomain.ru");
}
</script>
Редирект на ColdFusion:
Code
<.cfheader statuscode="301" statustext="Moved permanently">
<.cfheader name="Location" value="http://mydomain.ru">
Редирект с помощью meta refresh (HTML)
Code
<meta http-equiv="refresh" content="0;url=http://mydomain.ru">
Где 0 - это задержка переадресации в секундах, mydomain.ru - страница, куда переадресуем. Некоторые старые браузеры не поддерживают meta refresh со значением 0, для совместимости можно установить ненулевой значение, хотя это уже не актуально, старые браузеры давно канули в Лету. К тому же такой редирект не сможет склеивать сайты и передавать PR, так как игнорируется поисковыми системами и не влияет на код ответа сервера. Сервер возвращает код 200 OK, что соответствует обычной странице. Эта техника популярна у спамеров, поэтому её стоит применять только для страниц, которые не будут индексироваться.
Редирект с помощью JavaScript
Варианты переадресации на JavaScript чаще реализуются с использованием функции setTimeout('функция', задержка).
Например, автоматически кликнуть на кнопке "Submit" формы с name = "searchform" через 1 сек после загрузки кода:
Code
setTimeout('document.forms["searchform"].Submit.click()', 1000);
На кнопку "Submit" можно повесить любое действие, например, открыть новый URL в этом окне. Кстати говоря, такие перенаправляения чаще встречаются при организации дорвеев - браузер пользователя будет направлен на другую страницу, а поисковый робот, который не выполняет javascript, будет индексировать эту страницу, недоступную пользователю. На ней создатели дорвеев размещают текст из кучи ключевых слов под поисковики.
Редирект на javascript прост:
Code
<script> window.location.href("http://mydomain.ru"); </script>
Если нужна задержка по времени используйте setTimeout, описанный выше.Редирект на javascript, так же, как и в случае с meta refresh, не передаст PR страницы, т.к. им нельзя управлять кодом ответа сервера, изменив его на 301.
Распространённое заблуждение: запись document.location.href="http://otherdomain.ru"; НЕ является правильной и по стандартам НЕ должна перенаправлять на http://otherdomain.ru. Запомните: запись "document.location.href" содержит текущий url для его чтения, в то время как "window.location.href" предполагает как чтение, так и изменение текущего url.
Некоторые особенности редиректов
- Редирект с использованием файла .htaccess работает только на серверах, использующих в качестве веб-сервера Apache с включенным модулем ModRewrite.
- Использование файла .htaccess создает дополнительную нагрузку на Apache, посему рекомендуем использовать httpd.conf, если, конечно, к нему есть доступ.
- Для сохранения тИЦ и PR редирект обязательно должен передавать код 301 (что говорит поисковику, что страница перенесена и перенесена навсегда).
- Процесс склейки и передачи PR обычно занимает немалое время, порою несколько месяцев. Посему рекомендуем не удалять старую страницу. Известны случаи, когда старая страница в индексе Google висела ещё очень долгое время, хотя редирект с кодом 301 стоял и сайт регулярно индексировался поисковиком.