Ответы пользователя по тегу 1С-Битрикс
  • Как в init.php можно определить, что url вернет 404?

    @Yudgin888 Автор вопроса
    Как я это решил. Может кому пригодится.
    AddEventHandler("main","OnProlog","checkUri");
    function checkUri(){
        $GLOBALS["STATUS"] = 200;
        $uri = $_SERVER['REQUEST_URI'];
     //обработка урла
            if(strcmp($uri, $_SERVER['REQUEST_URI']) !== 0){
                $_SERVER['REQUEST_URI'] = $uri;
                $GLOBALS["STATUS"] = 301;
            }
        }
    }
    
    AddEventHandler('main', 'OnEpilog', 'сheck404Error', 1);
    function сheck404Error() {
        if ((defined('ERROR_404')) && (ERROR_404 == 'Y') && ($_SERVER['REQUEST_URI'] != '/404.php') || preg_match('/[а-яА-Я\s]+/msi', $_SERVER['REQUEST_URI'])) {
            $GLOBALS["STATUS"] = 404;
        }
    }
    
    AddEventHandler("main","OnEpilog","redirects");
    function redirects(){
        if($GLOBALS["STATUS"] === 301) {
            header("HTTP/1.1 301 Moved Permanently");
            header('Location: ' . $_SERVER['REQUEST_URI']);
            exit();
        } elseif($GLOBALS["STATUS"] === 404){
            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';
        }
    }
    Ответ написан
    Комментировать