Редирект 301 — несколько рецептов

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

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

Одним словом, такая задача часто возникает в нелегкой жизни вебмастера. Самое ужасное, что он может сделать со старыми URI — просто удалить их с сервера. (Минус пицот в карму.) Оптимальным решением служит перенаправление старых адресов на новые, с отдачей агенту пользователя заголовка 301 Moved Permanently.

Ниже описаны несколько техник, позволяющих сделать 301 редирект в разных условиях.

IIS (Internet Information Services, до версии 5.1 — Internet Information Server)

  • кликнуть правой клавишей на перемещаемых файле или директории
  • выбрать A redirection to a URL
  • ввести адрес редиректа
  • выбрать The exact url entered above и A permanent redirection for this resource
  • кликнуть Apply

ColdFusion

<.cfheader statuscode="301" statustext="Moved permanently">
<.cfheader name="Location" value="http://www.new-url.com">

PHP

<?
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.new-url.com" );
?>

ASP

<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.new-url.com/"
%>

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>

JSP (Java)

<%
response.setStatus(301);
response.setHeader( "Location", "http://www.new-url.com/" );
response.setHeader( "Connection", "close" );
%>

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

Старый домен на новый

На серверах под управлением Linux с включенным Mod_rewrite добавить в файл .htaccess следующие строки:

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

Редирект на www

На серверах под управлением Linux с включенным Mod_rewrite добавить в файл .htaccess следующие строки:

Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]

И еще один вариант, более универсальный, т.к. не содержит названия домена:

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

Внешние сслылки

Смотри также


3 комментария

  1. Минус 500 в карму конечно круто звучит, но официально это где-то написано? А если накосячить с редиректом, можно ещё больше в бубен получить. В чём проблема то 404го? Ну нет страницы и велкам в поиск или на шлавную.

  2. А вообще, если честно, то вопрос актуальный, щас как раз заморачиваюсь по этому поводу :( .com в индексе Google 150 страниц, а в Яше – болт, даже морда не влезла :( поэтому переезд на .ru будет экспериментом.
    В связи с этим вопрос, вариант php если использовать, то достаточно 2 строчки добавить в header и всё? или лучше .htaccess переписать и с него редиректить?

  3. Официально? Официально не знаю, но очень по матушке хочется, когда вместо «чтобы найти ответ на свой вопрос кликните здесь» получаешь «не, барин, нет такой страницы». Поэтому лучше постараться.

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

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

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

© Некоторые права сохранены