amelihovv
@amelihovv
Фулстек веб разработчик

Битрикс почему не работает 404.php?

При обращении к несуществующему адресу, например, /blablabla, всегда возвращается главная страница с кодом 200. А нужно, чтобы показывался файл 404.php, который в корне лежит. В чем может быть проблема? Настройка "Посылать в заголовке статус 200 на 404 ошибку" отключена.
  • Вопрос задан
  • 3681 просмотр
Пригласить эксперта
Ответы на вопрос 3
@farwace
Сталкивался несколько раз с такой ошибкой. Причина - что-то не туда нажали, что-то не то вписали в настройках чпу при настройке какого-либо компонента.
Далее битрикс в файл urlrewrite.php, который лежит в корне сайта занес правило, которое ломает логику открытия нужной страницы.
Посмотрите, какая страница открывается вместо /404.php
Далее просмотрите, какое правило ведет на эту страницу (['PATH'] ==> '...'). Попробуйте обернуть это правило в комментарии и проверить, ушла ли ошибка. Если ушла - удаляем правило.
Ответ написан
Anadi
@Anadi
Если ответ Вам помог мой, решением отметье его!
В файле \bitrix\php_interface\init.php добавьте:
AddEventHandler('main', 'OnEpilog', '_Check404Error', 1);  
function _Check404Error(){
   if(defined('ERROR_404') && ERROR_404=='Y' || 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';
   }
}

Должно помочь...
Ответ написан
rpsv
@rpsv
делай либо хорошо, либо никак
Проблема в .htaccess.
Добавьте в вопрос какой у вас.
Стандартный выглядит так:
Options -Indexes 
ErrorDocument 404 /404.php

<IfModule mod_php5.c>
  php_flag session.use_trans_sid off
  #php_value display_errors 1
  #php_value mbstring.internal_encoding UTF-8
</IfModule>

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
  RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
  RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

<IfModule mod_dir.c>
  DirectoryIndex index.php index.html
</IfModule>

<IfModule mod_expires.c>
  ExpiresActive on
  ExpiresByType image/jpeg "access plus 3 day"
  ExpiresByType image/gif "access plus 3 day"
  ExpiresByType image/png "access plus 3 day"
  ExpiresByType text/css "access plus 3 day"
  ExpiresByType application/javascript "access plus 3 day"  
</IfModule>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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