SEO :: Архив изменения директорий

Допустим у вас есть сайт и куча разделов.  Ссылки на разделы - как обычно, например:
www.f2u.lv/lat/about
www.f2u.lv/rus/o_nas

В какой-то прекрасный момент вы решаете сделать легкое SEO и переименовать разделы.
Задумка хорошая, однако не все задумываются что при этом поисковики типа GOOGLE будут по прежнему ссылаться на старый линк который после смены разделов будут вести на замечательную 404 страницу.

Дабы такого не происходило делаем следующее:
a) создаем SQL таблицу для хранения лога изменений
CREATE TABLE `wbg_sitetree_logdir` (
    `old_dir` VARCHAR(250) NOT NULL DEFAULT '',
    `new_dir` VARCHAR(250) NULL DEFAULT NULL,
    `changed` DATETIME NULL DEFAULT NULL,
    PRIMARY KEY (`old_dir`)
)
ENGINE=MyISAM
ROW_FORMAT=DEFAULT

b) Создаем триггер
CREATE TRIGGER wbg_catdir_logger AFTER UPDATE ON wbg_tree_categories
FOR EACH ROW BEGIN
    INSERT INTO wbg_sitetree_logdir SET old_dir = OLD.dir, new_dir = NEW.dir, changed = NOW() ON DUPLICATE KEY UPDATE new_dir = NEW.dir, changed = NOW();
END


c) Открываем index.php в корне и 
$category = mysql_fetch_assoc(mysql_query("SELECT * FROM wbg_tree_categories WHERE dir='".$REQUEST_URI."'"));

меняем на
$category = mysql_fetch_assoc(mysql_query("SELECT * FROM wbg_tree_categories WHERE dir='".$REQUEST_URI."'"));
if (!$category){
    $old_dir = mysql_fetch_assoc(mysql_query("SELECT new_dir FROM wbg_sitetree_logdir WHERE old_dir = '".$REQUEST_URI."'"));
    $category = mysql_fetch_assoc(mysql_query("SELECT * FROM wbg_tree_categories WHERE dir='".$old_dir['new_dir']."'"));
}



Вот и все. До ужаса просто. Только учтите что триггеры появились в mysql с версии 5
а для их дефиниции нужны root права до версии 5.1.6. Ну и еще пара ограничений которые вы можете на mysql.com накопать.
Если вам больше нравится 301 редиррект - можете вместо "$category =" вставить что-то типа
header (' HTTP/1.1 301 Moved Permanently') ;
header('Location: '.$old_dir['new_dir']);




Пользователь

Пароль

Поиск по сайту



Ссылка продана за пачку денег
настройка nginx