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

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

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

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

Загалом, зустрічайте повністю робочий і перевірений на собі мануал по вирішенню проблем з дублюванням сторінок перегляду повної новини, а так само описані нижче правки вирішують проблеми з усіма видами неправильних URL, переходячи за яким видається 404 помилка, а повинна видаватися правильна сторінка. Скрізь налаштований 301 редирект з неправильних адрес на вірні.

При написанні і налагодженні всіх змін враховані такі тонкощі:

  • Якщо на сайті присутні новини, розбиті на декілька сторінок, то при помилці в URL сторінки пагинации новини, здійснюватиметься редирект на правильний URL сторінки пагинации, а не на головну сторінку новини.
  • Виключено дублювання новин розбитих на сторінки, коли існували дві однакові сторінки за адресами site.ru/page,1,123-news_name.html і site.ru/123-news_name.html
  • Якщо на сайті присутні коментарі до новини, розбиті на декілька сторінок, то при помилці в URL сторінки пагинации коментарів, буде здійснюватися редирект на правильний URL сторінки пагинации, а не на головну сторінку новини.
  • Виключено дублювання новин з коментарями, розбитими на сторінки, коли існували дві однакові сторінки за адресами site.ru/page,1,1,123-news_name.html і site.ru/123-news_name.html
  • Вирішена проблема виправлення помилки у назві новини site.ru/123-bla_bla_news_name.html -> 301 редирект на site.ru/123-news_name.html
  • Здійснюється виправлення та/або підстановка вірного закінчення, наприклад:
    site.ru/123-news_name -> 301 редирект на site.ru/123-news_name.html
    site.ru/123-news_name.htmlbla -> 301 редирект на site.ru/123-news_name.html
    site.ru/123-news_na -> 301 редирект на site.ru/123-news_name.html
  • Якщо ви використовуєте ЧПУ Тип 3

    Увага!!! Якщо ви використовуєте ЧПУ Тип 3 – існують серйозні обмеження на виправлення помилок. Для ЧПУ Тип 3 можливе виправлення тільки неправильних закінчень посилань.

    Розглянемо приклад. У нас є публікація з вірним адресою site.ru/2012/05/15/news-name.html, будуть виправлятися тільки помилки виду:
    site.ru/2012/05/15/news-name.htmlsdjfnb
    site.ru/2012/05/15/news-name.ht
    site.ru/2012/05/15/news-name.

    Тобто помилки допущені в адресі до останньої крапки (.html) не можуть бути виправлені, можливо виправлення лише помилок після крапки.
    Ці обмеження накладаються через архітектури побудови движком url для даного типу ЧПУ.

    ЧПУ Тип 1 і 2. Правки для оптимізації DLE 9.3 / 9.4 / 9.5

    Правки у файлі .htaccess (розташований в корені, там же де основний index.php)

    Розкрити список правок

    ЗНАЙТИ

    # Сам пост
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),([09]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/print:page,([09]+),(.*).html/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/print:page,([09]+),([09]+)-(.*).html/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/([09]+)-(.*).html/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    RewriteRule ^page,([09]+),([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
    RewriteRule ^page,([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
    RewriteRule ^print:page,([09]+),([09]+)-(.*).html/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
    RewriteRule ^([09]+)-(.*).html/?)+$ index.php?newsid=$1&seourl=$2 [L]

    # Сам пост
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/([0-9]+)-(.*).html/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
    RewriteRule ^([0-9]+)-(.*).html/?)+$ index.php?newsid=$1&seourl=$2 [L]

    ЗАМІНИТИ на

    # Сам пост
    RewriteBase /
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),([09]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/print:page,([09]+),(.*)\.(.*)$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+),([09]+)-(.*)$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+)-(.*)$ index.php?newsid=$3&news_page=$2 [L]
    RewriteRule ^([^.]+)/print:page,([09]+),([09]+)-(.*)$ engine/print.php?news_page=$2&newsid=$3 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/([09]+)-(.*)$ index.php?newsid=$2 [L]
    RewriteRule ^page,([09]+),([09]+),([09]+)-(.*)$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
    RewriteRule ^page,([09]+),([09]+)-(.*)$ index.php?newsid=$2&news_page=$1 [L]
    RewriteRule ^print:page,([09]+),([09]+)-(.*)$ engine/print.php?news_page=$1&newsid=$2 [L]
    RewriteRule ^([09]+)-(.*)$ index.php?newsid=$1 [L]

    # Сам пост
    RewriteBase /
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*)\.(.*)$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$2 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$2&newsid=$3 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/([0-9]+)-(.*)$ index.php?newsid=$2 [L]
    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$2&news_page=$1 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$1&newsid=$2 [L]
    RewriteRule ^([0-9]+)-(.*)$ index.php?newsid=$1 [L]

    Сховати список правок

    Редагування файлу engine/modules/show.full.php

    Розкрити список правок

    ЗНАЙТИ і ВИДАЛИТИ

    if ($config[‘seo_control’] AND isset($_GET[‘seourl’])) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] != $c_url OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$c_url}/{$row[‘id’]}{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    if ($config[‘seo_control’] AND isset($_GET[‘seourl’])) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] != $c_url OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$c_url}/{$row[‘id’]}-{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    ЗНАЙТИ і ВИДАЛИТИ

    if ($config[‘seo_control’] AND $_GET[‘seourl’]) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’]) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$row[‘id’]}{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    if ($config[‘seo_control’] AND $_GET[‘seourl’]) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’]) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$row[‘id’]}-{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    ЗНАЙТИ

    } else {
    $full_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . $row[‘alt_name’] . “.html”;
    $print_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . “print:page,1,” . $row[‘alt_name’] . “.html”;
    $short_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] );
    $link_page = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . ‘page,’ . $news_page . ‘,’;
    $news_name = $row[‘alt_name’];

    } else {
    $full_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . $row[‘alt_name’] . “.html”;
    $print_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . “print:page,1,” . $row[‘alt_name’] . “.html”;
    $short_link = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] );
    $link_page = $config[‘http_home_url’] . date( ‘Y/m/d/’, $row[‘date’] ) . ‘page,’ . $news_page . ‘,’;
    $news_name = $row[‘alt_name’];

    ВИЩЕ ДОДАТИ

    //Виправлення невірних url
    $true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
    if (intval($_REQUEST[‘cstart’]) >= 2) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
    elseif ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
    if ($true_link != $full_link) {
    header(‘HTTP/1.1 301 Moved Permanently’);
    header (‘Location: ‘ . $full_link);
    die();
    }
    //Виправлення невірних url

    //Виправлення невірних url
    $true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
    if (intval($_REQUEST[‘cstart’]) >= 2) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
    elseif ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
    if ($true_link != $full_link) {
    header(‘HTTP/1.1 301 Moved Permanently’);
    header (‘Location:’ . $full_link);
    die();
    }
    //Виправлення невірних url

    Сховати список правок

    ЧПУ Тип 1 і 2. Правки для оптимізації DLE 9.6 (для 9.7 не підходить!)

    Правки у файлі .htaccess (розташований в корені, там же де основний index.php)

    Розкрити список правок

    ЗНАЙТИ

    # Сам пост
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),([09]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/print:page,([09]+),(.*).html/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/print:page,([09]+),([09]+)-(.*).html/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/([09]+)-(.*).html/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    RewriteRule ^page,([09]+),([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
    RewriteRule ^page,([09]+),([09]+)-(.*).html/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
    RewriteRule ^print:page,([09]+),([09]+)-(.*).html/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
    RewriteRule ^([09]+)-(.*).html/?)+$ index.php?newsid=$1&seourl=$2 [L]

    # Сам пост
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html/?)+$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html/?)+$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html/?)+$ engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 [L]
    RewriteRule ^([^.]+)/([0-9]+)-(.*).html/?)+$ index.php?newsid=$2&seourl=$3&seocat=$1 [L]
    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*).html/?)+$ index.php?newsid=$2&news_page=$1&seourl=$3 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*).html/?)+$ engine/print.php?news_page=$1&newsid=$2&seourl=$3 [L]
    RewriteRule ^([0-9]+)-(.*).html/?)+$ index.php?newsid=$1&seourl=$2 [L]

    ЗАМІНИТИ на

    # Сам пост
    RewriteBase /
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),([09]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/page,([09]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/print:page,([09]+),(.*)\.(.*)$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([09]{4})/([09]{2})/([09]{2})/(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+),([09]+)-(.*)$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
    RewriteRule ^([^.]+)/page,([09]+),([09]+)-(.*)$ index.php?newsid=$3&news_page=$2 [L]
    RewriteRule ^([^.]+)/print:page,([09]+),([09]+)-(.*)$ engine/print.php?news_page=$2&newsid=$3 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/([09]+)-(.*)$ index.php?newsid=$2 [L]
    RewriteRule ^page,([09]+),([09]+),([09]+)-(.*)$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
    RewriteRule ^page,([09]+),([09]+)-(.*)$ index.php?newsid=$2&news_page=$1 [L]
    RewriteRule ^print:page,([09]+),([09]+)-(.*)$ engine/print.php?news_page=$1&newsid=$2 [L]
    RewriteRule ^([09]+)-(.*)$ index.php?newsid=$1 [L]

    # Сам пост
    RewriteBase /
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*)\.(.*)$ engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)\.(.*)$ index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$4&news_page=$2&cstart=$3 [L]
    RewriteRule ^([^.]+)/page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$2 [L]
    RewriteRule ^([^.]+)/print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$2&newsid=$3 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^.]+)/([0-9]+)-(.*)$ index.php?newsid=$2 [L]
    RewriteRule ^page,([0-9]+),([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$3&news_page=$1&cstart=$2 [L]
    RewriteRule ^page,([0-9]+),([0-9]+)-(.*)$ index.php?newsid=$2&news_page=$1 [L]
    RewriteRule ^print:page,([0-9]+),([0-9]+)-(.*)$ engine/print.php?news_page=$1&newsid=$2 [L]
    RewriteRule ^([0-9]+)-(.*)$ index.php?newsid=$1 [L]

    Сховати список правок

    Редагування файлу engine/modules/show.full.php

    Розкрити список правок

    ЗНАЙТИ і ВИДАЛИТИ

    if ($config[‘seo_control’] AND ( isset($_GET[‘seourl’]) OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) ) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] != $c_url OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$c_url}/{$row[‘id’]}{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    if ($config[‘seo_control’] AND ( isset($_GET[‘seourl’]) OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] != $c_url OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$c_url}/{$row[‘id’]}-{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    ЗНАЙТИ і ВИДАЛИТИ

    if ($config[‘seo_control’] AND ( isset($_GET[‘seourl’]) OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) ) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] OR $_GET[‘news_name’] OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$row[‘id’]}{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    if ($config[‘seo_control’] AND ( isset($_GET[‘seourl’]) OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) {
    if ($_GET[‘seourl’] != $row[‘alt_name’] OR $_GET[‘seocat’] OR $_GET[‘news_name’] OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false ) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}{$row[‘id’]}-{$row[‘alt_name’]}.html”);
    die(“Redirect”);
    }
    }

    ЗНАЙТИ і ВИДАЛИТИ

    if ( $config[‘seo_control’] ) {
    if ($_GET[‘newsid’] OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}.date( ‘Y/m/d/’, $row[‘date’] ).$row[‘alt_name’].“.html”);
    die(“Redirect”);
    }
    }

    if ( $config[‘seo_control’] ) {
    if ($_GET[‘newsid’] OR strpos ( $_SERVER[‘REQUEST_URI’], “?” ) !== false) {
    if ($view_template == “print”) {
    $re_url = explode ( “engine/print.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    } else {
    $re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
    $re_url = reset ( $re_url );
    }
    header(“HTTP/1.0 301 Moved Permanently”);
    header(“Location: {$re_url}”.date( ‘Y/m/d/’, $row[‘date’] ).$row[‘alt_name’].”.html”);
    die(“Redirect”);
    }
    }

    ЗНАЙТИ

    } 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 = “”;

    ВИЩЕ ДОДАТИ

    //Виправлення невірних url
    $true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
    if (intval($_REQUEST[‘cstart’]) >= 2) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
    elseif ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
    if ($true_link != $full_link) {
    header(‘HTTP/1.1 301 Moved Permanently’);
    header (‘Location: ‘ . $full_link);
    die();
    }
    //Виправлення невірних url

    //Виправлення невірних url
    $true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
    if (intval($_REQUEST[‘cstart’]) >= 2) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
    elseif ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
    if ($true_link != $full_link) {
    header(‘HTTP/1.1 301 Moved Permanently’);
    header (‘Location:’ . $full_link);
    die();
    }
    //Виправлення невірних url

    Сховати список правок

    Поки що все, друзі. Скоро додам ще кілька важливих правок у список.

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

    З повагою, Олександр Алаєв