Bitrix - 404 ошибка
Войти

Bitrix - 404 ошибка

Bitrix - 404 ошибка

В битриксе 404 ошибка отрабатывается весьма специфически — неправильный адрес со статических страниц и разделов корректно перебрасывает на страницу 404.php, при этом сохраняя неправильный URL в адресной строке браузера. То есть все по seo.

А вот если неправильный адрес начинается с раздела инфоблока или каталога, то сервер отдаст браузеру 404 статус страницы (и то при определенных настройках инфоблока, о которых ниже), но 404 страницу не покажет, а покажет корневую страницу инфоблока, причем иногда совсем другого инфоблока. Но все-таки сохранит неправильный URL в адресной строке.

1. Проверить настройки компонента:

2. Файл 404.php — лежит в корне сайта. Должен выглядеть вот так (тут все стандартно):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 

if ($_SERVER['DOCUMENT_URI'] == "/404.php") {
 
$_SERVER['REQUEST_URI'] = $_SERVER['DOCUMENT_URI'];
}
include_once(
$_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');

CHTTP::SetStatus('404 Not Found');
@
define('ERROR_404''Y');

require(
$_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

$APPLICATION->SetTitle("Страница не найдена"); ?>  

ТУТ ТЕКСТ ВСЯКИЙ

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");

?>
3. В файл init.php вставляем обработчик:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 

AddEventHandler
("main""OnEpilog""My404PageInSiteStyle");
function 
My404PageInSiteStyle()
{
    if(
defined('ERROR_404') && ERROR_404 == 'Y')
    {
        global 
$APPLICATION;
        
$APPLICATION->RestartBuffer();
        include 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
        include 
$_SERVER['DOCUMENT_ROOT'].'/404.php';
        include 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
    }
}

?>
или
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 

 В файл init
.php вставляем обработчик:

AddEventHandler("main""OnEpilog""ShowError404");

function 
ShowError404() {
    if (
CHTTP::GetLastStatus()=='404 Not Found') {
        global 
$APPLICATION;
        
$APPLICATION->RestartBuffer();
        require 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
        require 
$_SERVER['DOCUMENT_ROOT'] . '/404.php';
        require 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
    }
}

?>
Реальный пример
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 

AddEventHandler
("main""OnAfterEpilog""ShowError404",1);

function 
ShowError404() {
    if (
CHTTP::GetLastStatus()=='404 Not Found') {
        global 
$APPLICATION;
        
$APPLICATION->RestartBuffer();
        
$APPLICATION->AddChainItem("404");
        require 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/header.php';
        require 
$_SERVER['DOCUMENT_ROOT'] . '/404.php';
        require 
$_SERVER['DOCUMENT_ROOT'].SITE_TEMPLATE_PATH.'/footer.php';
    }
}

?>



Ссылки по теме:

  1. 1. romapad.ru
  2. 1. alittlebit.ru
  3. Теги:
    php