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

404 и комплексный каталог

00 голосов
5
Здравствуйте, для лечения этой известной проблемы применил стандартное решение с форума, добавил обработчик в init.php:

Код
AddEventHandler('main',   'OnEpilog',   '_Check404Error', 1);

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';
   }
}
Решение работает, однако в случае ЧПУ вида #SECTION_CODE#/#ELEMENT_CODE# при вводе адреса наподобие site.ru/any-text 404 страничка не показывается. Вот так срабатывает правильно site.ru/any-text/  и вот так site.ru/any-text/any-text. В чем разница, не пойму?
спросил 07 Май, 13 от Nevels (280 баллов)

5 Ответы

00 голосов
Безотносительно самой проблемы: поправьте, плиз, условие в обработчике. Должно быть так:
    if (defined('ERROR_404') && ERROR_404=='Y' && !defined('ADMIN_SECTION'))
(иначе будут проблемы при 404 ошибке в админке).

Что же до комплексного компонента, то, видимо, он не выставляет 404 ошибку, когда должен бы это сделать.
ответил 07 Май, 13 от Ly (4,580 баллов)
00 голосов
Спасибо, Дмитрий, проверил заголовки, действительно не выставляется 404 на таких страницах, недоделка или ошибка явно в bitrix/components/bitrix/catalog/component.php:

Код
    if(!$componentPage)
    {
        $componentPage = "sections";

        if($arParams["SET_STATUS_404"]==="Y")
        {
            $folder404 = str_replace("\\", "/", $arParams["SEF_FOLDER"]);
            if ($folder404 != "/")
                $folder404 = "/".trim($folder404, "/ \t\n\r\0\x0B")."/";
            if (substr($folder404, -1) == "/")
                $folder404 .= "index.php";

             if($folder404 != $APPLICATION->GetCurPage(true))
                CHTTP::SetStatus("404 Not Found");
        }
    }
ответил 08 Май, 13 от Nevels (280 баллов)
00 голосов
Решение:

Код
    if(!$componentPage)
    {
        $componentPage = "sections";

        if($arParams["SET_STATUS_404"]==="Y")
        {
            $folder404 = str_replace("\\", "/", $arParams["SEF_FOLDER"]);
            if ($folder404 != "/")
                $folder404 = "/".trim($folder404, "/ \t\n\r\0\x0B")."/";
            if (substr($folder404, -1) == "/")
                $folder404 .= "index.php";

             if($folder404 != $APPLICATION->GetCurPage(true)){
                @define("ERROR_404", "Y");
                CHTTP::SetStatus("404 Not Found");}
        }
    }

Теперь бы еще сообразить как компл. каталог скопировать в свою папку, чтобы изменения не затерлись...
ответил 11 Июль, 13 от Nevels (280 баллов)
00 голосов
Может быть, лучше вынести проверку в файл section.php шаблона комплексного компонента? Ну или какой там из них подключается при неправильном урле.
ответил 15 Окт, 13 от Ly (4,580 баллов)
00 голосов
Очередной косяк на этот раз в bitrix:catalog.section
если в SECTION_CODE есть символы '-' или '_' (дефис или подчеркивание), чпу их не различает, страничка открывается по обоим адресам типа site.ru/sect-1/ и site.ru/sect_1/
Что-то совсем комплексный каталог с сео не дружит, так вполне можно сайты из топа валить, странички разделов обычно важные для продвижения...
ответил 17 Янв, 14 от Nevels (280 баллов)

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

0 голосов
2 ответов
0 голосов
3 ответов
спросил 16 Март, 14 от Grimmi (2,560 баллов)
0 голосов
4 ответов
спросил 04 Янв, 14 от Grimmi (2,560 баллов)
0 голосов
4 ответов
спросил 04 Сен, 13 от RoMZeS1k (330 баллов)
0 голосов
6 ответов
спросил 15 Июнь, 13 от Grimmi (2,560 баллов)