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

Не определяется 404 ошибка

00 голосов
8
Здравствуйте, случилась проблема с настройкой 404 ошибки.
При генерации ошибки, статус в заголовоке 200 и открывается страница Авторизации.

В .htaccess редирект прописан:
Код
Options -Indexes 
ErrorDocument 404 /404.php

php_flag allow_call_time_pass_reference 1
#php_flag session.use_trans_sid off

php_value display_errors 1

php_value memory_limit 128M
php_value mbstring.func_overload 2
php_value mbstring.internal_encoding UTF-8

<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]
</IfModule>


Сам файл 404.php существует и находиться в корне.
Код
<?
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');

CHTTP::SetStatus("404 Not Found");

if (strpos(php_sapi_name(),'cgi') !== false) 
    header('Status: 404 Not Found'); 
else 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');

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

$APPLICATION->SetTitle("404 Not Found");

$APPLICATION->IncludeComponent("bitrix:main.map", ".default", Array(
   "LEVEL"   =>   "3",
   "COL_NUM"   =>   "2",
   "SHOW_DESCRIPTION"   =>   "Y",
   "SET_TITLE"   =>   "Y",
   "CACHE_TIME"   =>   "3600"
   )
);

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


Пробывал снимать/ставить галочку "Посылать в заголовке статус 200 на 404 ошибку".
Без изменений, 404 не генерируется, в любом случае возвращает 200 Ok.
В чем проблема?

Спасибо,
Антон.
спросил 15 Июнь, 13 от PLyToVKa (160 баллов)

8 Ответы

00 голосов
а содержимое /urlrewrite.php можно?
ответил 15 Июнь, 13 от FRAY5 (140 баллов)
00 голосов
Цитата
Антон Дуканич пишет:
ErrorDocument 404 /404.php

А если попробовать закоментировать это строчку, и обратиться к несуществующему файлу, что сервер говорит?
ответил 29 Июнь, 13 от FireLuna (580 баллов)
00 голосов
Если закомментировать пишет: Not Found

Содержимое urlrewrite.php
Код
<?
error_reporting(E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR|E_PARSE);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools.php");

//try to fix REQUEST_URI under IIS
$aProtocols = array('http', 'https');
foreach($aProtocols as $prot)
{
   $marker = "404;".$prot."://";
   if(($p = strpos($_SERVER["QUERY_STRING"], $marker)) !== false)
   {
      $uri = $_SERVER["QUERY_STRING"];
      if(($p = strpos($uri, "/", $p+strlen($marker))) !== false)
      {
         if($_SERVER["REQUEST_URI"] == '' || $_SERVER["REQUEST_URI"] == '/404.php' || strpos($_SERVER["REQUEST_URI"], $marker) !== false)
            $_SERVER["REQUEST_URI"] = $REQUEST_URI = substr($uri, $p);
         $_SERVER["REDIRECT_STATUS"] = '404';
         $_SERVER["QUERY_STRING"] = $QUERY_STRING = "";
         $_GET = array();
         break;
      }
   }
}

if (!defined("AUTH_404"))
   define("AUTH_404", "Y");

$arUrlRewrite = array();
if(file_exists($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php"))
   include($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php");

if(isset($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404' || isset($_REQUEST["SEF_APPLICATION_CUR_PAGE_URL"]))
{
   if(isset($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404')
      $url = $_SERVER["REQUEST_URI"];
   else
      $url = $_SERVER["REQUEST_URI"] = $REQUEST_URI = (is_array($_REQUEST["SEF_APPLICATION_CUR_PAGE_URL"])? '':$_REQUEST["SEF_APPLICATION_CUR_PAGE_URL"]);

   if(($pos=strpos($url, "?"))!==false)
   {
      $params = substr($url, $pos+1);
      parse_str($params, $vars);

      $_GET += $vars;
      $_REQUEST += $vars;
      $GLOBALS += $vars;
      $_SERVER["QUERY_STRING"] = $QUERY_STRING = $params;
   }

   $HTTP_GET_VARS=$_GET;
   $sUrlPath = GetPagePath();
   $strNavQueryString = DeleteParam(array("SEF_APPLICATION_CUR_PAGE_URL"));
   if($strNavQueryString != "")
      $sUrlPath = $sUrlPath."?".$strNavQueryString;
   define("POST_FORM_ACTION_URI",htmlspecialchars("/bitrix/urlrewrite.php?SEF_APPLICATION_CUR_PAGE_URL=".urlencode($sUrlPath)));
}

foreach($arUrlRewrite as $val)
{
   if(preg_match($val["CONDITION"], $_SERVER["REQUEST_URI"]))
   {
      if (strlen($val["RULE"]) > 0)
         $url = preg_replace($val["CONDITION"], (strlen($val["PATH"]) > 0 ? $val["PATH"]."?" : "").$val["RULE"], $_SERVER["REQUEST_URI"]);
      else
         $url = $val["PATH"];

      if(($pos=strpos($url, "?"))!==false)
      {
         $params = substr($url, $pos+1);
         parse_str($params, $vars);

         $_GET += $vars;
         $_REQUEST += $vars;
         $GLOBALS += $vars;
         $_SERVER["QUERY_STRING"] = $QUERY_STRING = $params;
         $url = substr($url, 0, $pos);
      }
      if(!file_exists($_SERVER['DOCUMENT_ROOT'].$url) || !is_file($_SERVER['DOCUMENT_ROOT'].$url))
         continue;

      CHTTP::SetStatus("200 OK");

      $_SERVER["REAL_FILE_PATH"] = $url;

      include_once($_SERVER['DOCUMENT_ROOT'].$url);

      die();
   }
}
?>
ответил 02 Окт, 13 от PLyToVKa (160 баллов)
00 голосов
Антон, это urlrewrite.php из /bitrix/modules/main/include/. Во-всяком случае он должен лежать именно в этом месте. А меня интересует urlrewrite.php из корня сайта, он должен содержать что-то типа такого:
Код
<?
$arUrlRewrite = array(
   array(
      "CONDITION"   =>   "#^/news/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:news",
      "PATH"   =>   "/news/index.php",
   )
?>

у Вас как-то по-другому?
ответил 03 Янв, 14 от FRAY5 (140 баллов)
00 голосов
Извините, не о том подумал)
У меня вот так:
Код
<?
$arUrlRewrite = array(
   array(
      "CONDITION"   =>   "#^/examples/my-components/news/#",
      "RULE"   =>   "",
      "ID"   =>   "demo:news",
      "PATH"   =>   "/examples/my-components/news_sef.php",
   ),
   array(
      "CONDITION"   =>   "#^/communication/blog/weblogs/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:blog",
      "PATH"   =>   "/communication/blog/blog_sef.php",
   ),
   array(
      "CONDITION"   =>   "#^/communication/forum/talk/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:forum",
      "PATH"   =>   "/communication/forum/talk/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/useful/indexrus/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/content/useful/indexrus/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/communication/forum/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:forum",
      "PATH"   =>   "/communication/forum/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/board/my/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:iblock.element.add",
      "PATH"   =>   "/content/board/my/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/links/my/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:iblock.element.add",
      "PATH"   =>   "/content/links/my/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/articles/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:news",
      "PATH"   =>   "/content/articles/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/mylinks/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:iblock.element.add",
      "PATH"   =>   "/content/mylinks/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/useful/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/content/useful/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/links/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/content/links/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/links/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/search/letter/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/board/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/content/board/index.php",
   ),
   array(
      "CONDITION"   =>   "#^/content/links/#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:catalog",
      "PATH"   =>   "/content/links/list.php",
   ),
   array(
      "CONDITION"&nb
ответил 19 Апр, 14 от PLyToVKa (160 баллов)
00 голосов
Антон Дуканич, попробуйте закомментировать
Код
array(
      "CONDITION"   =>   "#^#",
      "RULE"   =>   "",
      "ID"   =>   "bitrix:socialnetwork",
      "PATH"   =>   "/club/index.php",
)
, если после этого 404 ошибка появится, то ошибка в настройках компанента bitrix:socialnetwork.
ответил 13 Авг, 14 от FRAY5 (140 баллов)
00 голосов
Появилась, искренне благодарю за помощь! :)
ответил 18 Дек, 14 от PLyToVKa (160 баллов)
00 голосов
Антон Дуканич, не за что. 8)
ответил 08 Апр, 15 от FRAY5 (140 баллов)

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

0 голосов
0 ответов
0 голосов
0 ответов
спросил 05 Дек, 13 от AngryKid (420 баллов)
0 голосов
0 ответов
0 голосов
2 ответов
спросил 04 Авг, 13 от RoMZeS1k (330 баллов)
0 голосов
0 ответов
спросил 25 Апр, 13 от Kania (5,180 баллов)