Тема: Правильный ответ сервера, код 404 при ошибке страница не найдена

Здравствуйте, форумчане.

Посоветуйте, пожалуйста, как сделать правильную 404 страницу?

Ситуация такая, работаю сейчас на DLE 9.6, "если страница" отсутствует выдает стандартную ошибку dle, однако при проверке через яндекс веб-мастер - проверка ответа сервера, выдает как нормальную страницу, то есть код 200, пробовал несколько вариантов предложенных в сети, ни один из них не выдает корректную ошибку. Один вариант выдал даже код 302 - Найдено smile

А 404 ошибка предложенная сервером уж больно она не правильно оформленная и явно продающая услуги хостера...вообщем, не то что нам нужно.

Крайне благодарен.
С Уважением, Lynch

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Из объяснения не понятно, что надо сделать. Сделать правильную страницу или правильный ответ сервера?
Правильный ответ сервера на несуществующую страницу - это 404.
302 - это «перемещено временно».

3 (18.03.2013 14:22 отредактировано Lynch)

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Мне нужно чтобы сервер выдавал ответ с кодом 404 на несуществующую страницу на моем сайте, но при этом нужно подсунуть не страницу от хостера, как в моем случае, а мою специально подготовленную страницу.

Нужен результат: Моя страница 404(дизайн) и ответ от сервера 404;
Сейчас: Страница хостера 404 и ответ сервера 404, затем моментальный редирект на страницу хостера продажи его услуг

Пробовал через .htaccess вариант:

Делаем страницу для ошибок 404, 401, 400, 403, 500 для DataLife Engine.
В ".htaccess" ищем:

RewriteEngine On
Вставляем выше:

ErrorDocument 400 http://site.ru/index.php?do=found&400
ErrorDocument 401 http://site.ru/index.php?do=found&401
ErrorDocument 403 http://site.ru/index.php?do=found&403
ErrorDocument 500 http://site.ru/index.php?do=found&500
ErrorDocument 404 http://site.ru/index.php?do=found&404
Замените в выше вставленом коде адрес сайта.

В файле "engine/engine.php" ищем:

switch ($do) {
Вставляем ниже:

case "found":
    if(isset($_GET['400'])) {
        $title="неверный запрос (400)";
        $e=400;
    }elseif(isset($_GET['401'])) {
        $title="требуется атворизация (401)";
        $e=401;
    }elseif(isset($_GET['403'])) {
        $title="ограничение доступа (403)";
        $e=403;
    }elseif(isset($_GET['404'])) {
        $title="файл не найден (404)";
        $e=404;
    }elseif(isset($_GET['500'])) {
        $title="перезагрузка сервера (500)";
        $e=500;
    }else {
        $title="файл не найден (404)";
        $e=404;
    }

    $metatags['title'] = "Название сайта - {$title}";
   
    $tpl->load_template( $e.'.tpl' );
    $tpl->compile( 'content' );
break;
Не забываем создать шаблоны 400.tpl, 401.tpl, 403.tpl, 500.tpl, 404.tpl smile

В итоге получилось что визуально для человека - это страница 404 не найдено, а для робота - 302 - Найдено -временно перемещено.

Надеюсь объяснил.
Спасибо

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Хостеру надо писать, чтобы apache настроили под Ваши условия.

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Спасибо, значит без вмешательства хостера никак?

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Lynch пишет:

ErrorDocument 404 http://site.ru/index.php?do=found&404

Ответ сервера на запись такого вида всегда состоит из цепочки 302 -> 404 - так и должно быть!
Никакого вмешательства хостера тут не надо.
Могу только предположить, что в большинстве панелей управления хостингом, сервером есть пункт, где нужно/можно прописать адреса своих страниц ошибок.

7 (20.03.2013 14:34 отредактировано Lynch)

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

admin, Оказалось Вы правы, на самом-то деле, в панели управления (после тщательного осмотра) была ссылочка на редактирование этих самых страниц ошибок.
Признаюсь! Моя не внимательность! Даже оказался целый редактор вплоть до возможности полностью "нарисовать" страницу самому.

Большое спасибо всем за ответы.

8 (28.05.2013 18:02 отредактировано dim)

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Прочитал тему, но так и не понял, как сделать, чтобы страница отдавала 404-й ответ.

Делал по этой инструкции, но созданная страница отдает не 404-й, а 200-й ответ.

Написал хостеру, он ответил:

Вам нужен либо отдельный файл со страницей 404 ошибки и записью
header('HTTP/1.1 404 Not Found');
И тогда прописывать до него локальный путь.
Либо править скрипт который выдает 404 средствами движка, чтобы на странице присутствовал header('HTTP/1.1 404 Not Found');

Может, кто-нибудь напишет кратенькую инструкцию, как сделать по уму.



P.S. Есть получше и попроще, на мой взгляд, инструкция - вот она, но та же беда.

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

dim, Действительно удаленные страницы отдают ответ 404. А вот какие-то мистические случаи с неправильными адресами могут отдавать и 200 ответ, есть такая проблема в DLE. Но тут уже подобными правками не помочь, тут необходимо с движком серьезно поработать, что должен делать разработчик.
В наших силах - делать редиректы с кривых адресов, что я и рекомендую делать.

+ dim

10

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

dim, Включите php в шаблонах tpl (http://dle-news.ru/tips/33-ispolzovanie … onakh.html). Далее в созданных шаблонах(tpl) 400, 401, 403, 404, 500, вставьте код ответа сервера

<?php
header("HTTP/1.0 400 Bad Request");
?>
<?php
header("HTTP/1.0 401 Unauthorized");
?>
<?php
header("HTTP/1.0 403 Forbidden");
?>
<?php
header("HTTP/1.0 404 Not Found");
?>
<?php
header("HTTP/1.0 500 Internal Server Error");
?>

11

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

leshqa пишет:

Включите php в шаблонах tpl

Слишком уж старая подсказка, аж 2006 года. Проверено на более новых версиях?

12

Re: Правильный ответ сервера, код 404 при ошибке страница не найдена

Да, на 10.0 версии работает