jkeks блог


Как я восстанавливал один сайт.

29.3.2018 - 2611 просмотр ;)




Короче для восстановления сайтов я пользуюсь сервисом r-tools. Он прекрасен до определенной степени.

Восстановил я сайт (имя которому не имеет особого значения). Залил на хост и смотрю по вебархиву, а ЧПУ не сходится.
А ЧПУ оказалось сделано по старым методикам. т.е.

?a=1

R-tools все перелопатил как вздумалось и сделал ЧПУ вида:

_a=1.html

т.е. все старые ссылки которые ссылаются на домен теперь ссылаются куда попало только не на наши страницы.

Что делать ?
Ломать ЧПУ полностью !
Что бы восстановить ЧПУ пришлось создать мифический index.php, и на него в .htaccess натравить все запросы:

DirectoryIndex index.php

А в r-tools конфиге сделать исключение для файла index.php вот так:

RewriteCond %{REQUEST_FILENAME} !/index.php$

Дальше надо index.php что бы ловил все запросы, а параметры выдергивать. Это легко:

$p = $_REQUEST['a'];

Дальше нужно отдавать на выход содержимое. Причем если внутрянняя страница — одно, а если главная, то по другому, да и вход фильтровать надо тоже:

if (preg_match("/^\d+$/",$p))
$in = file_get_contents("_p=$p.html");
else
$in = file_get_contents("index.html");

Дальше если отдать все на выход как есть, то по законам r-tools нам не вставится ни end.txt ни head.txt .. и получится голая страничка, поэтому нужно все самому профильтровать и с делать небольшой аналог r-tools обработчика.

На самом деле это по 2 строчки кода:

$head = file_get_contents(".__route/head.txt");
$end = file_get_contents(".__route/end.txt");
$in = str_replace("</head>", "$head</head>", $in);
$in = str_replace("</body>", "$end</body>", $in);

Теперь можно отдавать на выдан и все нужные Метрики приаттачатся как надо.
По сути наш сайт теперь принимает ссылочное как надо на старый ЧПУ и мы не теряем вес страниц. Осталось одно. r-tools поломал и самиссылки внутри HTML страниц.
Что бы починить нужно пробежаться по всем HTML файликам и сменить ЧПУ, это делается (не считая загрузки и записи) в однумаленькую красивую строчку:

$in = preg_replace( "/_p\=(\d+?)\.html/", '?p=$1', $in, -1, $count );

Вот и все. Финита комедия. К сожалению данный функционал не внедрен в сам r-tools т.к. такие махинации не всегда так однозначны и требуют поглаживания рукой каждый сайтик. но тикеты у Кохи (автора r-tools) есть.

p.s. Коха, у тебя прекрасный сервис, почини баг с кусками от WA.. будь мужыкомъ!





Видеочат рулетка
jAntivirus Рейтинг@Mail.ru