Прочитал практические все страницы при поиске решения этой проблемы, перепробовал все, но ничего не помогло.
При вводе несуществующего раздела, например, tulpar-trade.ru/asdads, открывается просто пустая белая страница, но статус 200 ([URL=https://bertal.ru/index.php?a6112809/tulpar-trade.ru/sdfgshrth#h]https://bertal.ru/index.php?a6112809/tulpar-trade.ru/sdfgshrth#h[/URL]). Причем, если пытаться открыть страницу 404.php напрямую, происходит то же самое - лишь белый экран. Есть подозрения, что это вызвано файлом /bitrix/modules/main/include/urlrewrite.php в 404.php, так как при комментировании этой строки и двух после нее, страница откроется.
Галочка на "Посылать в заголовке статус 200 на 404 ошибку" не стоит.
Вот содержимое файлов:
404.php[CODE]<?
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("Страница не найдена");
$APPLICATION->SetPageProperty("keywords", "Страница не найдена");
$APPLICATION->SetPageProperty("description", "Страница не найдена");
?>
<div class="container-error-page">
<div class="error-page-big-text">
404
</div>
<div class="col col-12 ta-center">
<?$APPLICATION->IncludeComponent(
"bitrix:search.form",
"bottom",
array(
"COMPONENT_TEMPLATE" => "bottom",
"PAGE" => SITE_DIR."search/index.php"
),
false
);?>
</div>
<a href="/">Главная страница</a>
<a href="search/map.php">Карта сайта</a>
</div>
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
[/CODE]
init.php[CODE]AddEventHandler('main', 'OnEpilog', '_Check404Error', 1);
function _Check404Error(){
if(defined('ERROR_404') && ERROR_404=='Y' || CHTTP::GetLastStatus() == "404 Not Found"){
CHTTP::SetStatus('404 Not Found');
GLOBAL $APPLICATION;
$APPLICATION->RestartBuffer();
require $_SERVER['DOCUMENT_ROOT'].'/404.php';
}
}
[/CODE]
/bitrix/modules/main/include/urlrewrite.php[CODE]<?
error_reporting(E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR|E_PARSE);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/bx_root.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/lib/loader.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools.php");
$bSkipRewriteChecking = false;
//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");
require_once($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/php_interface/dbconn.php");
if (defined("BX_URLREWRITE"))
return;
define("BX_URLREWRITE", true);
$foundQMark = strpos($_SERVER["REQUEST_URI"], "?");
$requestUriWithoutParams = ($foundQMark !== false? substr($_SERVER["REQUEST_URI"], 0, $foundQMark) : $_SERVER["REQUEST_URI"]);
$requestParams = ($foundQMark !== false? substr($_SERVER["REQUEST_URI"], $foundQMark) : "");
//decode only filename, not parameters
$requestPage = urldecode($requestUriWithoutParams);
if(!defined("BX_UTF") && CUtil::DetectUTF8($_SERVER["REQUEST_URI"]))
{
$requestPage = \Bitrix\Main\Text\Encoding::convertEncoding($requestPage, "utf-8", (defined("BX_DEFAULT_CHARSET")? BX_DEFAULT_CHARSET : "windows-1251"));
}
$requestUri = $requestPage.$requestParams;
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/virtual_io.php");
$io = CBXVirtualIo::GetInstance();
$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($_GET["SEF_APPLICATION_CUR_PAGE_URL"]))
{
if(isset($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404' && !isset($_GET["SEF_APPLICATION_CUR_PAGE_URL"]))
{
$url = $requestUri;
}
else
{
if(!is_string($_GET["SEF_APPLICATION_CUR_PAGE_URL"]))
{
$_GET["SEF_APPLICATION_CUR_PAGE_URL"] = '';
}
$url = $requestUri = $_GET["SEF_APPLICATION_CUR_PAGE_URL"];
$_SERVER["REQUEST_URI"] = $REQUEST_URI = CHTTP::urnEncode($_GET["SEF_APPLICATION_CUR_PAGE_URL"]);
unset($_GET["SEF_APPLICATION_CUR_PAGE_URL"]);
}
if(($pos = strpos($url, "?")) !== false)
{
$params = substr($url, $pos+1);
if ($params !== false && $params !== "")
{
parse_str($params, $vars);
unset($vars["SEF_APPLICATION_CUR_PAGE_URL"]);
$_GET += $vars;
$_REQUEST += $vars;
if (ini_get_bool("register_globals"))
$GLOBALS += $vars;
$_SERVER["QUERY_STRING"] = $QUERY_STRING = CHTTP::urnEncode($params);
}
}
if (isset($_GET["SEF_APPLICATION_CUR_PAGE_URL"])
&& (
isset($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS'] == '404'
|| ($requestUriWithoutParams != "/bitrix/urlrewrite.php")
)
)
{
$url = $requestUri = $_SERVER["REQUEST_URI"] = $REQUEST_URI = "";
$_GET = array();
$_REQUEST = array();
$_SERVER["QUERY_STRING"] = $QUERY_STRING = "";
}
$HTTP_GET_VARS = $_GET;
$uriPath = GetRequestUri();
define("POST_FORM_ACTION_URI", htmlspecialcharsbx("/bitrix/urlrewrite.php?SEF_APPLICATION_CUR_PAGE_URL=".urlencode($uriPath)));
}
if (!CHTTP::isPathTraversalUri($_SERVER["REQUEST_URI"]))
{
foreach($arUrlRewrite as $val)
{
if(preg_match($val["CONDITION"], $requestUri))
{
if (strlen($val["RULE"]) > 0)
$url = preg_replace($val["CONDITION"], (strlen($val["PATH"]) > 0 ? $val["PATH"]."?" : "").$val["RULE"], $requestUri);
else
$url = $val["PATH"];
if(($pos=strpos($url, "?"))!==false)
{
$params = substr($url, $pos+1);
parse_str($params, $vars);
unset($vars["SEF_APPLICATION_CUR_PAGE_URL"]);
$_GET += $vars;
$_REQUEST += $vars;
$_SERVER["QUERY_STRING"] = $QUERY_STRING = CHTTP::urnEncode($params);
$url = substr($url, 0, $pos);
}
$url = _normalizePath($url);
if(!$io->FileExists($_SERVER['DOCUMENT_ROOT'].$url))
continue;
if (!$io->ValidatePathString($url))
continue;
$urlTmp = strtolower(ltrim($url, "/\\"));
$urlTmp = str_replace(".", "", $urlTmp);
$urlTmp7 = substr($urlTmp, 0, 7);
if (($urlTmp7 == "upload/" || ($urlTmp7 == "bitrix/" && substr($urlTmp, 0, 16) != "bitrix/services/" && substr($urlTmp, 0, 18) != "bitrix/groupdavphp")))
continue;
$ext = strtolower(GetFileExtension($url));
if ($ext != "php")
continue;
CHTTP::SetStatus("200 OK");
$_SERVER["REAL_FILE_PATH"] = $url;
include_once($io->GetPhysicalName($_SERVER['DOCUMENT_ROOT'].$url));
die();
}
}
}
//admin section 404
if(strpos($requestUri, "/bitrix/admin/") === 0)
{
$_SERVER["REAL_FILE_PATH"] = "/bitrix/admin/404.php";
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/admin/404.php");
die();
}
define("BX_CHECK_SHORT_URI", true);
[/CODE]/urlrewrite.php[CODE]<?php
$arUrlRewrite=array (
1 =>
array (
'CONDITION' => '#^/online/([\\.\\-0-9a-zA-Z]+)(/?)([^/]*)#',
'RULE' => 'alias=$1',
'ID' => NULL,
'PATH' => '/desktop_app/router.php',
'SORT' => 100,
),
4 =>
array (
'CONDITION' => '#^/bitrix/services/ymarket/#',
'RULE' => '',
'ID' => '',
'PATH' => '/bitrix/services/ymarket/index.php',
'SORT' => 100,
),
2 =>
array (
'CONDITION' => '#^/online/(/?)([^/]*)#',
'RULE' => '',
'ID' => NULL,
'PATH' => '/desktop_app/router.php',
'SORT' => 100,
),
0 =>
array (
'CONDITION' => '#^/stssync/calendar/#',
'RULE' => '',
'ID' => 'bitrix:stssync.server',
'PATH' => '/bitrix/services/stssync/calendar/index.php',
'SORT' => 100,
),
7 =>
array (
'CONDITION' => '#^/personal/order/#',
'RULE' => '',
'ID' => 'bitrix:sale.personal.order',
'PATH' => '/personal/order/index.php',
'SORT' => 100,
),
16 =>
array (
'CONDITION' => '#^/articles/#',
'RULE' => '',
'ID' => 'bitrix:news',
'PATH' => '/articles/index.php',
'SORT' => 100,
),
15 =>
array (
'CONDITION' => '#^/catalog/#',
'RULE' => '',
'ID' => 'bitrix:catalog',
'PATH' => '/catalog/index.php',
'SORT' => 100,
),
9 =>
array (
'CONDITION' => '#^/store/#',
'RULE' => '',
'ID' => 'bitrix:catalog.store',
'PATH' => '/store/index.php',
'SORT' => 100,
),
14 =>
array (
'CONDITION' => '#^\\??(.*)#',
'RULE' => '&$1',
'ID' => 'bitrix:catalog.smart.filter',
'PATH' => '/local/templates/tulpar_store/components/bitrix/catalog.section/section-test/template.php',
'SORT' => 100,
),
3 =>
array (
'CONDITION' => '#^/rest/#',
'RULE' => '',
'ID' => NULL,
'PATH' => '/bitrix/services/rest/index.php',
'SORT' => 100,
),
12 =>
array (
'CONDITION' => '#^/news/#',
'RULE' => '',
'ID' => 'bitrix:news',
'PATH' => '/news/index.php',
'SORT' => 100,
),
);
[/CODE]
Почему с такой вроде простой задачей все так сложно?