Подскажите, как лучшим способом сделать редирект

Discussion in 'PHP' started by PEPSICOLA, 24 Jan 2010.

  1. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    До этого времени, у меня был форум на

    forum.domain.com

    сейчас переношу форум на главный домен, и нужно сделать это с минимум негативных последствий.

    что бы индексирование в поисковиках восстановилось быстро, что бы пользователям не было проблем вернуться на форум, что бы человек который придёт через старые запросы с поисковика, смог сразу попасть на главную страницу сайта.

    а так же функциональность Php/mysql и т.д.

    про редиректы ничего не знаю, есть какие то mod_rewrite, htaccess и т.д.

    либо проще перенести форум на поддомене создать Index файл с объявлением "мы поднялись уровнем выше - линк"? :)
     
  2. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    1. mod_rewrite

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond {HTTP_HOST} ^yourdomain.com
    RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=permanent,L]

    Дописать в файл .htaccess

    2. Apache Redirect

    Redirect 301 / http://www.yourdomain.com/

    Дописать все в тот же файл .htaccess

    3. PHP

    header(“HTTP/1.1 301 Moved Permanently”);
    header(“Location: http://www.newdomain.com/newdir/newpage.htm”);
    exit();

    http://www.highrankings.com/forum/index.php?showtopic=5644 (c) full article
     
    #2 Solker, 24 Jan 2010
    Last edited: 24 Jan 2010
    3 people like this.
  3. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Большое спасибо!
     
  4. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Спасибо, Solker

    Попробовал вышеприведённый вариант, а так же пересмотрел другие способы в google,

    "собрал", то, что работает и редиректит поддомен на основной:

    Но теперь проблема в том, когда я пытаюсь добавить ещё один RewriteCond для редиректа на http://www.ugex.ru с сайта http://ugex.ru

    Пытался добавить ещё одну строку RewritCond, но вместо forum пишу www, и почему то редирект пропадает вообще, как с http://forum.ugex.ru, так и с http://ugex.ru

    P.s. - прочитал что два RewriteCond - допустимо.
     
  5. suser

    suser Member

    Joined:
    30 Dec 2009
    Messages:
    35
    Likes Received:
    5
    Reputations:
    0
    301 редирект это наилучший метод сохранения ваших позиций в поисковых системах, когда вы переносите страницу или сайт. Код "301" интерпретируется как постоянное перемещение ("moved permanently").
    Простой редирект (в файле .htaccess или httpd.conf для Apache):
    PHP:
    Redirect 301 http://www.you.com/new.htm
    где:
    Redirect 301 - это инструкция, говорящая что страница перемещена
    / - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
    http://www.you.com/new.htm - новая страница или сайт (не забывайте поставить последний "/", если переадресация идет на сайт).

    Чтобы переадресовать только страницу, сохранив PR старой страницы:
    PHP:
    Redirect 301 /old/old.htm http://www.you.com/new.htm
    где:
    /old/old.htm - путь и имя старой страницы

    Аналогичный синтаксис для переадресации сайта:
    PHP:
    RedirectPermanent http://www.you.com/
    Пример переадресации каталога:
    PHP:
    RedirectPermanent /old-directory http://www.domain.com/new-directory/ 
    Например, зашедших в test переадресуем на www.test.com, остальных на enter.test.com (порядок следования записей важен):
    PHP:
    Redirect permanent /test    http://www.test.com/
    Redirect permanent /        http://enter.test.com/
    Примечание: для моих целей (изменение домена) хватило первого варианта простого 301 редиректа.
    Использование mod_rewrite (прописывается в файле .htaccess):

    Ставшая классической задача слияния имена сайта с www и без него, решается так:
    PHP:
    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond 
    %{HTTP_HOST} ^yoursite\.com
    RewriteRule 
    ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L] . 
    или альтернативный синтаксис:
    PHP:
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond 
    %{HTTP_HOST} ^domain\.com$ [NC]
    RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
    Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

    Редирект старого домена на новый:
    PHP:
    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule 
    (.*) http://www.newdomain.com/$1 [R=301,L]
    Например, если необходимо чтобы вместо rewrite.htm загружался файл rewrite.html, добавьте в .htaccess:
    PHP:
    RewriteEngine   on
    RewriteBase     
    /
    RewriteRule     ^rewrite\.htm$  rewrite.html [R=permanent]
    Для замены всех .htm файлов .html файлами:
    PHP:
    RewriteEngine  on
    RewriteBase     
    /
    RewriteRule     ^(.*)\.htm$  $1.html [R=permanent]
    Редирект на PHP:
    PHP:
    <?php
    header
    ("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.newdomain.ru/newdir/newpage.htm");
    exit();
    ?>
    Лучше указать HTTP/1.1, так как более старые не поддерживают виртуальный хостинг. Не забудьте, что до вызова header, ничего не должно выводиться (например, echo или print). Поэтому этот код лучше ставить в начало php-скрипта. Более полный вариант php редиректа с сохранением передаваемой страницы и параметров вызова:
    PHP:
    <?
    $ref=$_SERVER['QUERY_STRING'];
    if (
    $ref!=''$ref='?'.$ref;
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: http://newdomain.com/'.$ref);
    exit();
    ?>
     
    1 person likes this.
  6. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Спасибо, suser. Я читал несколько подобных статей. У меня немного другая ситуация. Выше перечисленные примеры - глючат.
     
  7. PEPSICOLA

    PEPSICOLA . . . . . 2L . . . . .

    Joined:
    14 Oct 2004
    Messages:
    1,025
    Likes Received:
    823
    Reputations:
    368
    Всё, решил проблему :) Не знал, об объединении RewriteCond с помощью [OR].

    Помогла эта статья.