Псевдо-сайт или зеркалирование.

Псевдо-сайт или зеркалирование.

Недавно встала задача следующего содержания: “У заказчика есть сайт на ASP. Он не хочет ничего знать про хостинг, но на данный момент его тяготит знание о том, что договор с предыдущим хостером заканчивается и сайт должен быть размещен в другом месте. Примечательно то, что заказчик хочет сохранив структуру и дизайн переделать сайт на php, а затем заплатить еще раз за полный цикл разработки сайта.”

Вот это да… - подумал я, услышав такие слова от начальства и пошел смотреть на этот сайт. Сайт был полностью на ASP - соответственно перенести его на UNIX-хостинг (виртуальный хостинг, где не установить ASP) не представлялось возможным (на первый взгляд) - надо переписывать все с нуля на php.

Переписывать? Т.е. писать заново и не переделать структуру? Не сделать навигацию более логичной? Это представлялось адом…. и мозги зашевелились….

А что если скачать сайт целиком и настроить апач так, чтобы ASP обрабатывалось как HTML? - подумал я и зарядил в терминал такую строку:

wget -rkp --level=49 --user-agent='google-bot' --referer='http://example.com/' --random-wait -w 2  http://example.com

Кому-то стало страшно? Тогда давайте разберемся. Если кто-то не знает что делает команда wget - вам прямая дорога в GOOGLE с запросом “man wget”. А мы тем временем посмотрим на опции этой замечательной качалки. -r - рекурсивно - т.е. на скачаной странице будут собраны все ссылки и страницы (файлы) по этим ссылкам тоже будут скачаны. -k - конвертировать после скачивания ссылки внутри документов в относительные - это значит , что сайт станет доступен локально - в какой бы каталог его не положили. -p -скачивать все, что требуется для отображения страницы - т.е. все *.gif *.jpg *.png *.css *.js и т.д. - все это будет скачано и аккуратно распределено по каталогам (так же как на сайте). –level=49 - тут явный перебор - не думаю чтобы кто-то делал сайты с таким колличеством прыжков, но такая цифра, чтоб уж точно скачать все файлы. –user-agent=’google-bot’ - притворимся паучком - чтоб не забанили :) –referer=’http://example.com/’ - как будто на каждую страницу мы попадаем с главной. –random-wait -w 2 - а это самое интересное…. Некоторые программисты делают защиту от DDoS атак (и правильно) - не будем злобными DDoS-ерами сделаем между закачкой файлов рандомную паузу и назначим задержку от 0 до 4х секунд. Откуда я взял 4? Просто wget делает паузу от 0 до x*2 секунд, где x- это цифра, указанная опцией -w.

Ну вот - сайт сохранен на локальной машине… Посмотрим? УЖАС!!! Никогда не называйте свои файлы такими именами defaul.asp?id=5&c=8&val=1 defaul.asp?cat=107 и т.д. Ну да ладно файлы есть - начинаем настройку апача…

AddDefaultCharset windows-1251
AddType text/html .asp

Поехали? А не тут-то было - file /company/default.asp not found on this server Интересно… как это? не скачлся? - да я его и не просил… я просил /company/defailt.asp?id=102 - и такой файл есть. В чем дело? в том что знак вопроса идентифицируется апачем, как спец-символ - начала передачи GET-переменных.Что будем делать?

У меня было два варианта: Первый - отключить обработку вопросительного знака - но такой трюк, если и возможен, то явно не в .htaccess - а мне предстоит повторить все это на виртуальном хостинге. Второй - ModRewrite. Я выбрал второй.

AddDefaultCharset windows-1251
AddType text/html .asp
 
RewriteEngine On
RewriteRule .* 1.php [L]

Фишка в том, что любой запрос будет попадать на 1.php , а уже скрипт будет читать запрошенный URI относительно корня сайта. Итак тот самый 1.php:

<?php
if(!empty($_SERVER[’REQUEST_URI’])){
readfile ($_SERVER[’DOCUMENT_ROOT’].$_SERVER[’REQUEST_URI’]);
}else{
readfile (’index.html’);
}
?>

т.к. wget скачал заглавную страницу как index.html - при нулевом URI будем отдавать в поток именно ее. Вот так за час экспериментов был сделан сайт, который переписывался бы с нуля около двух недель.Единственный минус - придется пройтись по файлам утилитой sed и изменить action у формы поиска, а поисковик написать внешний…. Но это уже другая тема.

Последние изменения: %2010/%03/%22 %01:%Mar