Миграция на Друпал. Часть вторая: Сохранение структуры URL

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

Аватар пользователя sadmin sadmin 21 ноября 2008 в 8:54

Оригинал: Migrating the Drupal way. Part II: saving those old URLs. Kevin Hankens

Во второй части рассуждений о миграции, я хочу остановиться на важности сохранения набора URL-адресов при переносе со старого сайта и показать примеры того, как это можно сделать в Drupal. Переходы через поисковые системы и другие переходы имеют неоценимое значение, когда речь заходит об успехе сайта. Я поддерживаю в одиночку сайты, которые выдерживают свыше 100000 обращений в день с Google. Не говоря уже о всех внешних ссылках и закладках на ваших страницах. Если вы думаете о миграции на Drupal и не рассмотрели способов сохранения старых адресов URL, вам определенно следует задуматься над этим. Последствия утраты переходов на ваши страницы могут быть катастрофическими, но к счастью решение является достаточно простым.

Читать далее оригинал: Migrating the Drupal way. Part II: saving those old URLs. Kevin Hankens

Комментарии

Аватар пользователя Химический Али Химический Али 24 ноября 2008 в 13:24

К сожалению, автор проигнорировал (может и умышленно) проблему однозначного соответствия старых ID и NID. Ведь при импорте старых материалов мы не сможем задать NID - они выдаются базой данных и если в цепочке старых ID был провал (например, если вы удалили часть материалов), то в БД Друпала этого провала уже не будет.

Аватар пользователя Химический Али Химический Али 24 ноября 2008 в 13:25

Итак, как же сохранить работоспособность всех старых ссылок? Можно было бы выдавать перехватывать обращения по ним, генерируя сообщение "404 Not Found", однако это неудобно для пользователей и однозначно понизит ваши позиции в выдаче поисковых систем.
К счастью, небольшая настройка позволит перенаправить посетителей в нужное место на обновленном сайте. Ниже мы приведем несколько настроек для сохранения адреса на сайте с помощью расширения mod_rewrite для веб-сервера Apache и нескольких модулей Drupal.

Аватар пользователя Химический Али Химический Али 24 ноября 2008 в 13:35

Переход с ранее используемых ID к NID Друпала

Если каким-то образом вам удалось составить «карту» соответсвтия старых ID и новых NID, можно использовать mod_rewrite для перенаправления. Допустим, старый адрес выглядел как http://example.com/index.asp?id=123, а новый сайт использует URL типа http://example.com/node/123. Включение следующих правил в файл .htaccess позволит перенаправить посетителя к новому урл с корректным http-заголовком 301.

# Match a request for index.asp
RewriteCond %{REQUEST_URI} ^/index.asp$
# Match a query string like id=[some number] and capture that number
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
# Rewrite a Drupal friendly URL using the captured number
# Note that %1 is a backreference from a RewriteCond
# where $1 is a backreference from a RewriteRule
RewriteRule ^.*$ index.php?q=node/%1 [L]

Вы можете смело выкинуть первое правило RewriteCond, тогда будет производиться захват любого URL, оканчивающегося на "?ID=[некое число]". В принципе для Apache все равно, что делать с расширением .ASP, он однозначно будет перенаправлять все запросы к index.php.

Заметим, что мы не рассматриваем здесь вопрос соответствия старых ID новым NID. Расскажем об этом как-нибудь потом.

Аватар пользователя Химический Али Химический Али 24 ноября 2008 в 13:45

Создание индивидуальных URL-псевдонимов в Drupal

Возможно, вы не захотите использовать mod_rewrite для обработки адресов. Это может перегрузить сервер или вы не сможете составить однозначную таблицу соответствий ID->NID. В этом случае можно использовать модуль Path, входящий в дистрибутив Drupal, и добавить псевдонимы для адресов, генерируемых по умолчанию. Чтобы создать псеводним вручную, перейдите по ссылкам Управление -> Конструкция -> Псевдонимы -> Добавить. Так, например, можно добавить (старый) псевдоним 2008/12/12/my-seo-page.html для страницы node/5 в Друпал:

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

Аватар пользователя Химический Али Химический Али 24 ноября 2008 в 13:55

Программное решение

Приведенный выше пример использования модуля Path хорош, когда нужно создать псевдонимы лишь для нескольких страниц. Но подумайте что будет, если нам надо перенести 250000 страниц. К счастью, псевдонимы можно создавать программным способом, «налету», прямо в скрипте импорта, используя функцию Друпал path_set_alias().

require "includes/bootstrap.inc";
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$node = new stdClass();

// Here you would look up your old article information and populate the node object.
$node->title = $old_title; // etc.

// Next you would want to create some logic to reconstruct your old URL
// example.com/2008/10/18/my-old-url.html -- use:
$old_url = "2008/10/18/my-old-url.html";

// Save the node in the database
node_save($node);

// Save the new alias based on your old URL
if ($node->nid) {
  path_set_alias('node/' . $node->nid, $old_url, NULL, 'en');
}