Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Настройка 404 для несуществующих ссылок

00 голосов
2
Занимаюсь оптимизацией сайта для СЕО и нужно для ссылок каталога типа
http://мойсайт.ru/catalog/laptops/????MANUFACT=13
http://мойсайт.ru/catalog/laptops/?MANUFACT=13&&&&&&&&
выдавать 404. Эта уязвимость может быть использована конкурентами. Как правильно решить проблему?
спросил 29 Июнь, 13 от Beet (160 баллов)

2 Ответы

00 голосов
Решение сходной задачи.

В /bitrix/php_interface/init.php:
Код
/*************************************************************************************************************
*
* Поисковые роботы заходят на сайт по старым ссылка с несуществующими параметрами.
* например
* index.php?link_n=7
* Несуществующие параметры:
* link_n=
* name=description
* sg_wares=
* sg_desk=
*
* Нужно при таких параметрах выдавать 404 ошибку.
*
* Таким же образом нужно обрабатывать урлы вида /catalog/detail.php?ID=223433
*
*************************************************************************************************************/

if (
   ($_SERVER['SCRIPT_NAME'] == '/index.php' && (isset($_GET['link_n']) || isset($_GET['sg_wares']) || isset($_GET['sg_desk']) || $_GET['name'] == 'description'))
   ||
   (mb_strtolower($_SERVER['REDIRECT_URL']) == '/catalog/detail.php')
)
{
   AddEventHandler('main', 'OnEpilog', '_Check404Error', 1);
   define('ERROR_404', 'Y');

   function _Check404Error()
   {
      if (defined('ERROR_404') && ERROR_404=='Y')
      {
         GLOBAL $APPLICATION;
         $APPLICATION->RestartBuffer();
         include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.SITE_TEMPLATE_ID.'/header.php';
         require ($_SERVER['DOCUMENT_ROOT'].'/404.php');
         include $_SERVER['DOCUMENT_ROOT'].'/bitrix/templates/'.SITE_TEMPLATE_ID.'/footer.php';
      }
   }
}

ответил 29 Июнь, 13 от Ly (4,580 баллов)
00 голосов
Спасибо. Это именно то что нужно. Я реализовал это следующим образом:
Код
if(preg_match("/&{2,}/",$_SERVER['QUERY_STRING']) || preg_match("/&+$/",$_SERVER['QUERY_STRING']) || preg_match("/\?+/",$_SERVER['QUERY_STRING'])){
    //Вызвать 404 ошибку
}
ответил 01 Авг, 13 от Beet (160 баллов)

Похожие вопросы

0 голосов
8 ответов
спросил 14 Май, 13 от nonameXXX (260 баллов)
0 голосов
5 ответов
спросил 03 Дек, 13 от borodaz (160 баллов)
0 голосов
0 ответов
0 голосов
8 ответов
спросил 30 Июнь, 13 от HoBa (140 баллов)