• Страница 1 из 1
  • 1
Различные варианты перенаправления (redirect)
Driver86Дата: Среда, 2012-03-14, 00:21:31 | Сообщение # 1
Нет аватара у Driver86
CyberMan
Администраторы
Сообщений: 545
Репутация: 14
Не на форуме
Простой вариант редиректа (.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 стоял и сайт регулярно индексировался поисковиком.



 
  • Страница 1 из 1
  • 1
Поиск: