Главная > Трики (хард- и софткор) > Редирект 301 — несколько рецептов

Редирект 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]

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

Смотри также

Трики (хард- и софткор)

  1. 26 Январь 2009 в 23:22 | #1

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

  2. 28 Январь 2009 в 00:36 | #2

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

  3. 4 Февраль 2009 в 03:09 | #3

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

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

  1. Пока что нет уведомлений.
SEO Powered by Platinum SEO from Techblissonline