Как в init.php можно определить, что url вернет 404?
Привет!
Если страница не существует, по умолчанию и так ведь сработает редирект на 404.php
Но если в лоб, то делать запрос к этому url и смотреть заголовки$file = 'http://www.domain.com/somefile.jpg';
$file_headers = @get_headers($file);
if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
} else {
    $exists = true;
}
или curl вариантfunction url_exists($url) {
    if (!$fp = curl_init($url)) return false;
    return true;
}
https://stackoverflow.com/questions/2280394/how-ca...
Как я это решил. Может кому пригодится.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';
    }
}