Всем привет! Уже третий день на формумах и сайтах... пробовал разные методы ничего не помогает.
Прошу помощи т.к самому решить проблему не удалось суть проблемы - если в строке вводим несуществующий адрес http://www.sordon.ru/asd, то выдается непонятная страница - не 404. при этом HTTP/1.1 200 OK при этом никакие надписи или тайтл не меняется на "Страница не найдена"
в .htaccess первые 2 строчки Options -Indexes ErrorDocument 404 /404.php
в 404.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("Страница не найдена"); ?> <h1>ТУТ ТЕКСТ</h1> <h1>ТУТ ТЕКСТ</h1> <? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>
удалил, теперь если вводить (http://www.sordon.ru/asd) вот такая ошибка Fatal error: Cannot redeclare ShowCanonical() (previously declared in /home/sordon/sordon.nichost.ru/docs/bitrix/templates/_sordon/header.php:33) in /home/sordon/sordon.nichost.ru/docs/bitrix/templates/_sordon/header.php on line 35
в header на этих строчках <?php function ShowCanonical() { global $APPLICATION; if ($APPLICATION->GetProperty("canonical")!="" && $APPLICATION->GetProperty("canonical")!=$APPLICATION->sDirPath){ return '<li nk rel="canonical" href="www.sordon.ru'.$APPLICATION->GetProperty("canonical").'/" />'; } else {return false;} } $APPLICATION->AddBufferContent('ShowCanonical'); ?>
изменил как вы сказали - <?php if(!function_exists('ShowCanonical')) function ShowCanonical() но теперь ругается Parse error: syntax error, unexpected 'ShowCanonical' (T_STRING), expecting '(' in /home/sordon/sordon.nichost.ru/docs/bitrix/templates/_sordon/header.php on line 32
по поводу init.php, ни в корне, ни /home/sordon/sordon.nichost.ru/docs/bitrix/templates/_sordon/ такого файла нету
перемести в init сайт не открывается выдает ошибку Parse error: syntax error, unexpected 'ShowCanonical' (T_STRING), expecting '(' in /home/sordon/sordon.nichost.ru/docs/bitrix/php_interface/init.php on line 168
пока что убрал это из init
кстати в этом же файле нашел эти строки AddEventHandler('main', 'OnEpilog', '_Check404Error', 1);
function _Check404Error() { 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'; }
function cartUpdate($itemId, $quantity) { $arItem = getItemById($itemId); if ( $arItem && isset($_SESSION["CART"][$itemId]) ) { $_SESSION["CART"][$itemId] = $quantity; } }
function cartDelete($itemId) {
if ( isset($_SESSION["CART"][$itemId]) ) { unset($_SESSION["CART"][$itemId]);
} foreach ($_SESSION["CART"] as $key=>$value){ if ($key=''){ unset($_SESSION["CART"][$key]); }
}
}
function cartClear() { $_SESSION["CART"] = array(); }
function getCartList() { if ( is_array($_SESSION["CART"]) ) { return $_SESSION["CART"]; } else { return array(); } }
function _Check404Error() { 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'; }
когда код который ниже, вставил в init.php сайт перестал открываться выдавая ошибку T_STRING. это 166 строка
<?php if(!function_exists('ShowCanonical')) function ShowCanonical()
{ global $APPLICATION; if ($APPLICATION->GetProperty("canonical")!="" && $APPLICATION->GetProperty("canonical")!=$APPLICATION->sDirPath){ return '<link rel="canonical" href="www.sordon.ru'.$APPLICATION->GetProperty("canonical").'/" />'; } else {return false;} } $APPLICATION->AddBufferContent('ShowCanonical'); ?>
блин да чтож это такое... теперь вылезла - Parse error: syntax error, unexpected 'if' (T_IF) in /home/sordon/sordon.nichost.ru/docs/bitrix/php_interface/init.php on line 165 оставил вот так: ... ... function _Check404Error() { 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'; }
php if(!function_exists('ShowCanonical')) function ShowCanonical() { global $APPLICATION; if ($APPLICATION->GetProperty("canonical")!="" && $APPLICATION->GetProperty("canonical")!=$APPLICATION->sDirPath){ return '<link rel="canonical" href="www.sordon.ru'.$APPLICATION->GetProperty("canonical").'/" />'; } else {return false;} } $APPLICATION->AddBufferContent('ShowCanonical');
?> если убрать еще php то Parse error: syntax error, unexpected 'ShowCanonical' (T_STRING), expecting '(' in /home/sordon/sordon.nichost.ru/docs/bitrix/php_interface/init.php on line 165
удалил обе функции, теперь при переходу на http://www.sordon.ru/asd, переходит на страницу 404.php но код все равно выдает : HTTP/1.1 200 OK Server: nginx/1.10.1 Date: Mon, 24 Jul 2017 07:58:46 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive X-Powered-By: PHP/5.6.30
Виталий Свиридов, так. Во-первых, для оформления кода используйте соответствующие возможности формы битрикса, иначе очень сложно читать Ваш код. Во-вторых, перед footer.php вставьте следующий код:
Код
CHTTP::SetStatus("404 Not Found");
И в третьих, если уж выводите 404 страницу так, то хотя бы завершайте выполнение скрипта ПОСЛЕ подключения footer.php ( хотя бы через die(); или через exit(); )
И после всех этих действий - перед вызовом footer.php сделайте вывод константы ERROR_404
Андрей можно подробней, у меня опыта работы с битриксом с гулькин нос, все что Вы перечислили сам не смогу сделать
где найти формы для облегчения чтения кода?
"CHTTP::SetStatus("404 Not Found"); вставить перед footer.php" - вот так: function _Check404Error() { 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'; CHTTP::SetStatus("404 Not Found"); <----- сюда? include $_SERVER['DOCUMENT_ROOT'] . SITE_TEMPLATE_PATH . '/footer.php'; } }
в каком месте вставлять "die(); или через exit()"?
"перед вызовом footer.php сделайте вывод константы ERROR_404" прокомментируйте пожалуйста ни слова не понял что куда
Аналогичная проблема, при неправильном url скидывается на sait.ru/404.php при том, код сервера 200. никак не хочет отдавать 404 код и не хочет сохранять введеный url.
Если убрать весь код из файла 404.php при неправильном вводе url, выдает 404 ответ сервера и сохраняется введый неправильный url (по СЕО). но возникает проблема, главная страница отобрашается корректно, а при переходе на какие либо категории сайта, дает экран ошибки Not Found.
содержимое файла 404 и init аналогичное, что и выше. Где еще можно покапать по данному вопросу?