куда можно выложить код редиректов через header с использованием регурярных выражений, для SEO дыр Joomla + JbZoo за исключением дыры разбивки товаров на странички, пока не разобрался как получить число страничек на которые разбиваются категории товаров.
и пока не разобрался как заклеить дыру в теге /tag/, - скрипт предоставленный ниже редиректит со всех страничек с тегами, нужно допилить проверку, есть ли хоть 1 товар удовлетворяющий искомому тегу.
У себя на сайте решил вопрос с клонами разбивки на странички через регулярку, с указанием мах диапазона разбивки каждой категории на странички, очень не удобно - но работает.
Собственно сам код:
Вставить в код шаблона, или в отдельный файл и подключить через include_once
<?php
$find_klon_url = $_SERVER [HTTP_HOST].$_SERVER[REQUEST_URI]; // текущий url
//print_r ($find_klon_url); // для проверки
// ########################
// редирект материалов без категории
// [a-z0-9-]+ - цифры и буквы повторяющиеся 1+ раз
// ([a-z0-9-]+)\. -//-// цикл - повторение символов до первого символа .
// (([a-z0-9-]+)\.)+ цикл выше описанного, пока не закончатся .
// [a-z0-9]+ - последняя доменная зона без .
// [\/] - / в конце домена сайта
$reg = "/^(([a-z0-9-]+)\.)+[a-z0-9]+[\/]item/i"; // домен + /item
if ( preg_match ($reg, "$find_klon_url") ) // проверка регулярного выражения
{
//echo preg_match ($reg, "$find_klon_url") . "<br>";
//echo "текущий url <br>" . ($find_klon_url) . "<br><br>";
$new_url = 'https://'.$_SERVER [HTTP_HOST] . '/uslugi/item' . preg_replace($reg, "" , $find_klon_url);
//echo "новый измененный url <br>" .($new_url) . "<br><br>";
header("Location: $new_url"); // редирект на правильную страничку
exit;
}
// ########################
// редирект idex.php на корень сайта
$reg = "/^(([a-z0-9-]+)\.)+[a-z0-9]+[\/]index.php/i"; // домен + /index.php
if ( preg_match ($reg, "$find_klon_url") ) // проверка регулярного выражения
{
if (strripos($find_klon_url, '?option=com_jmap') !=0) {}
else
{
//echo preg_match ($reg, "$find_klon_url") . "<br>";
//echo "текущий url <br>" . ($find_klon_url) . "<br><br>";
$new_url = 'https://'.$_SERVER [HTTP_HOST];
//echo "новый измененный url <br>" .($new_url) . "<br><br>";
header("Location: $new_url"); // редирект на правильную страничку
exit;
}
}
// ########################
// редирект лишнего / в конце url
$reg = "/\/$/i"; // редирект страничек с лишним / в конце url
$domen = $_SERVER [HTTP_HOST]."/";
if ( preg_match ($reg, "$find_klon_url") && $find_klon_url != $domen)
{
//echo preg_match ($reg, "$find_klon_url") . "<br>";
echo "текущий url <br>" . ($find_klon_url) . "<br><br>";
$new_url = 'https://' . preg_replace($reg, "" , $find_klon_url);
echo "новый измененный url <br>" .($new_url) . "<br><br>";
header("Location: $new_url"); // редирект на правильную страничку
exit;
}
// ########################
// редирект статьи которая находится одновременно в нескольких категориях
$reg = "/\?category_id=[0-9]+/i"; // удаляем с url идентификатор дополнительной категории
if ( preg_match ($reg, "$find_klon_url") )
{
//echo preg_match ($reg, "$find_klon_url") . "<br>";
//echo "текущий url <br>" . ($find_klon_url) . "<br><br>";
$new_url = 'https://' . preg_replace($reg, "" , $find_klon_url);
//echo "новый измененный url <br>" .($new_url) . "<br><br>";
header("Location: $new_url"); // редирект на правильную страничку
exit;
}
// ########################
// поиск запрещенных символов в url и редирект на главную страницу
if (strripos($find_klon_url, '?option=com_jmap') !=0) {}
else if (strripos($find_klon_url, '&') >0
OR strripos($find_klon_url, '?') >0
OR strripos($find_klon_url, '//') >0
OR strripos($find_klon_url, '#') >0
OR strripos($find_klon_url, '/tag/') >0
OR strripos($find_klon_url, 'component') !=0
)
{
$new_url = 'https://' . $_SERVER [HTTP_HOST];
header("Location: $new_url"); // редирект на правильную страничку
exit;
}
?>