Как правильно переехать на Друпал?

Главные вкладки

Аватар пользователя Zeratul Zeratul 8 ноября 2012 в 9:35

Есть сайт на PHP Nuke, хочу переехать на друпал 7. Как это сделать менее болезненно, не потеряв старых страниц которые есть в поисковых индексах?
Вначале хотел поставить два скрипта параллельно но счас понимаю что так не получится. Sad Я так понял в друпале вся адресация идет через относительные ссылки (относительно установленного УРЛ), как сохранить старые ссылки и подружить их с друпалом?

Комментарии

Аватар пользователя Zeratul Zeratul 8 ноября 2012 в 11:15

Хмм.. Вопрос в том что бы оставить сайт на прежнем месте..
Или Вы мне предлагаете разместить новую версию в субдомене?

Аватар пользователя Crea Crea 8 ноября 2012 в 11:51

Zeratul wrote:
Хмм.. Вопрос в том что бы оставить сайт на прежнем месте..
Или Вы мне предлагаете разместить новую версию в субдомене?

А я вам разве предлагаю домен сменить ?
Редиректы работают и в пределах 1 домена. И посетителей не потеряете, и все поисковики поймут.

Аватар пользователя q2_faith q2_faith 8 ноября 2012 в 13:26

"Zeratul" wrote:
Как это сделать менее болезненно

нанять специалиста. за бесплатные советы никто ответственности не несет)

Аватар пользователя Zeratul Zeratul 8 ноября 2012 в 14:44

«Редиректы работают и в пределах 1 домена. И посетителей не потеряете, и все поисковики поймут.»

Хорошо более конкретный вопрос:
Есть файл вида index.php в старом скрипте, и такой же файл в друпале и так далее. Как разрешить этот конфликт?

Отдельной директорией, субдоменом или ещё как.

Прошу отвечать только по теме, и только тех кто делал подобное сам или точно знает как это делается.
Тех же кто "примерно представляет как это", прошу воздержаться от комментариев.

Аватар пользователя q2_faith q2_faith 8 ноября 2012 в 15:53

"Zeratul" wrote:
Отдельной директорией, субдоменом или ещё как.

судя по вашим словам, вы не совсем представляете что нужно сделать.
мой совет из личного опыта, была неудачная попытка с редиректами на своем сайте, трафик упал на порядок. если у вас сайт не о вашем хобби(и приносит доход), то дешевле нанять человека.
p.s. кстати, все что нужно вам уже подсказали.

Аватар пользователя natbampo natbampo 8 ноября 2012 в 15:50

"Zeratul" wrote:
Хорошо более конкретный вопрос:
Есть файл вида index.php в старом скрипте, и такой же файл в друпале и так далее. Как разрешить этот конфликт?

шо за маразм?
При переезде на друпал останется только друпал, при чем тут ваш старый сайт?..

Аватар пользователя Zeratul Zeratul 8 ноября 2012 в 15:55

Если бы я четко представлял что нужно сделать я бы не задавал здесь вопросов.
Редирект мне никогда не внушал доверия. Да и прописать его на сотнях страницах, удовольствие сомнительное..

Как то наблюдал, переход на новый дизайн у крупных сайтов (типа finam), так вот они в начале давали ссылку с главной страницы, на "новый дизайн". И болталась это ссылка у них около года, и только после этого они осуществляли переход. Так вот насколько я помню там новый дизайн у них размещался в другой папке. Мне лично не совсем понятно зачем так сделано было, если кто в курсе поясните плиз.

Аватар пользователя q2_faith q2_faith 8 ноября 2012 в 16:01

"Zeratul" wrote:
Мне лично не совсем понятно зачем так сделано было, если кто в курсе поясните плиз.

бета-тестинг. к сео не имеет никакого отношения

Аватар пользователя Dan Dan 8 ноября 2012 в 20:41

Все статьи переносятся автоматом - для этого пишется скрипт на PHP, который в БД сохраняет старый адрес и добавляет статьи на новый сайт (на друпале) с нужным алиасом.
После переноса два варината:
- отдавать страницы со старым адресом
- делать 301 редирект со старого адреса на новый
Для этого может понадобится написать маленький модуль, это если старый адрес "нечистый". То есть такой: "index.php?type=articles&id=34". А чистые это: "articles/it/tv-box-setup-howto"

Аватар пользователя Zeratul Zeratul 15 ноября 2012 в 17:33

Решил сделать так. Свой старый сайт, я просто перенесу в папку Old\. После чего в корневой останется только файл заглушка modules.php, который будет реализовывать редирект на папку Old\.

Dan wrote:

Для этого может понадобится написать маленький модуль, это если старый адрес "нечистый". То есть такой: "index.php?type=articles&id=34". А чистые это: "articles/it/tv-box-setup-howto"

А где можно посмотреть пример, написания такого модуля. То есть по сути мне просто нужен файл modules.php который бы делал редирект на файл ..\old\modules.php со всем нечистым адресом.

Аватар пользователя Crea Crea 8 ноября 2012 в 23:29

Quote:
Редирект мне никогда не внушал доверия. Да и прописать его на сотнях страницах, удовольствие сомнительное..

Уговаривать вас вряд ли кто-то будет. Не хотите - не пользуйтесь. Хозяин-барин ))

Аватар пользователя Zeratul Zeratul 9 ноября 2012 в 8:53

Dan – спасибо, за внятный ответ.

Склоняюсь к варианту «отдавать страницы со старым адресом». В РНР не силен, поэтому интересует есть ли вариант без «написания маленького модуля»? Например можно ли сделать так что бы параллельно работало сразу два скрипта Друпал и Нюка (на разных базах)? Я вижу проблему в том, что у разных скриптов совпадают некоторые названия файлов и папок. Наверное можно как то, разделить скрипты разместив их в отдельные папки, но нужно как то вынести index.php. Или как правильно это делается?

PS. Если человек знает, о чём речь это видно сразу. Так же как и если он не знает, но очень хочет «умно выглядеть».

Аватар пользователя Dan Dan 11 ноября 2012 в 21:14

"Zeratul" wrote:
Наверное можно как то, разделить скрипты разместив их в отдельные папки, но нужно как то вынести index.php. Или как правильно это делается?

Это делается именно как я описал. Два сайта по одному адресу нормально работать не будут.

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

Аватар пользователя Dan Dan 17 ноября 2012 в 14:24

Вот код из одного проекта:

<?php

/**
 * Implementation of hook_menu().
 */

function upgrade_menu() {
  $items['posts.php'] = array(
    'page callback' => 'upgrade_redirect',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Menu callback
 */

function upgrade_redirect(){
  if(isset($_GET['tag'])){
    $id = upgrade_get_history('term', $_GET['tag']);
    drupal_goto('taxonomy/term/'.$id, null, null, 301);
  }elseif(isset($_GET['id'])){
    $id = upgrade_get_history('post', $_GET['id']);
    drupal_goto('node/'.$id, null, null, 301);
  }else{
    drupal_goto('articles');
  }
}

Этот код обрабатывает пути типа:
posts.php?tag=123 - список постов определённой категории, редирект на taxonomy/term/456
posts.php?id=89 - статья, редирект на node/56
posts.php - список статей, редирект на articles

Функция upgrade_get_history возвращает id объектов в текущей системе по id из старой.

Для вашего случая нужен обработчик modules.php, который будет просто делать редирект на /old/modules.php.....

Аватар пользователя Zeratul Zeratul 23 ноября 2012 в 13:04

Спасибо, за код может пригодится.

Но я обошелся редактированием .htaccess
А точнее просто перенес весь старый скрипт, в отдельную папку (old), и исправил .htaccess дописав там 2 строчки

Redirect 301 /index.php http://mysait.ru/old/index.php
Redirect 301 /modules.php http://mysait.ru/old/modules.php

Теперь думаю можно удалять старый скрипт и ставить Друпал. Может я конечно и не вижу каких то подводных камней, но вроде бы так всё должно работать.

Аватар пользователя PVasili PVasili 23 ноября 2012 в 13:25

"Dan" wrote:
То есть такой: "index.php?type=articles&id=34". А чистые это: "articles/it/tv-box-setup-howto"

Тут только в .htaccess редирект на свой скрипт и скрипт будет 301 отдавать на новую страницу. Что то типа:

<?php
RewriteCond 
%{QUERY_STRING} ^option=com_content&view=article&id=(\d+)(.+)/?$
RewriteRule ^index\.phphttp://site.ru/redirect.php?id=%1 [R=301,L]
?>

в redirect.php

<?php
$old_url 
$_GET['id']; // this id we set in mod_rewrite
...
movePage(301,"http://site.ru/$new_url");
?>

Пары соответствий $old_url и $new_url или в массив или в таблицу если их много.

з.ы.
Гугл правильно переклеил ~90% ссылок за неделю (при ~2.5к страниц) тугодумный яндекс 2-ю неделю молчит. до этого яша сайт поменьше за 2 недели переклеил.

Аватар пользователя Dan Dan 25 ноября 2012 в 16:12

"Zeratul" wrote:
Но я обошелся редактированием .htaccess
А точнее просто перенес весь старый скрипт, в отдельную папку (old), и исправил .htaccess дописав там 2 строчки

Поздравляю, вы решили проблему переноса сайта в другой каталог.
Вопрос - зачем?
Сейчас у вас 301 редирект на старую версию и вы сидите и думаете как сделать новый сайт. Потом вы его сделаете и - снова 301 редирект?

"PVasili" wrote:
Тут только в .htaccess редирект на свой скрипт и скрипт будет 301 отдавать на новую страницу. Что то типа:

Я предпочту модуль - это проще и быстрее, чем писать несколько костылей (PHP-файл с табличкой, которая, как правило связана с друпал, htaccess для апача, локейшен для nginx и т.д.)

Аватар пользователя PVasili PVasili 25 ноября 2012 в 16:25

"Dan" wrote:
Я предпочту модуль - это проще и быстрее

Это - да, а как быть с адресами вида /index.php?option=com_content&view=category&layout=blog&id=1&Itemid=50 ?

Аватар пользователя Dan Dan 25 ноября 2012 в 16:35

"PVasili" wrote:
Это - да, а как быть с адресами вида /index.php?option=com_content&view=category&layout=blog&id=1&Itemid=50 ?

Вроде hook_init или hook_bootstrap - не помню какой. Hook_menu уже не нужен - просто смотришь $_GET.