Сделать правильно 404 ошибку

ramnek
На сайте с 16.11.2008
Offline
48
10033

Добрый день.

Есть сайт без движка, задача сделать 404 страницу, которая бы ещё и правильно отдавала ответ.

Если прописать в .htaccess

ErrorDocument 404 /404.php

то если вбить в URL абракадабру, то происходит редирект на 404.php

В 404.php прописываю:

<?php

header("HTTP/1.0 404 Not Found");
?>

Теперь проверяю через http://www.bertal.ru/ что происходит

1) Ввожу мой-сайт/123

2) Ответ сервера:

HTTP/1.0 302 Moved Temporarily

Date: Tue, 12 Jun 2012 06:58:42 GMT

Server: Apache

Location: http://мой-сайт/404.php

3) Далее

HTTP/1.0 404 Not Found

Все вроде бы нормально, но почему происходит 302 редирект!? Это же код ошибки, который означает что страница временно перемещена...

Как сделать так, чтобы на мой-сайт/123 выдавалась сразу

HTTP/1.0 404 Not Found

Например, ya.ru/123 выдает сразу "404 Not Found" + страница подменена.

> Как заработать на своем сайте (http://zarabotat-na-sajte.ru/)
> Инвестиции в интернете (http://zarabotat-na-sajte.ru/investitsii/vlozhenie-deneg-v-internete.html)
NU
На сайте с 19.02.2010
Offline
55
#1

Запись в .htaccess:

ErrorDocument 404 /404.shtml

даст вывод страницы 404.shtml, которая в корне, с кодом ответа 404. Никакого редиректа не будет.

Зачем там php? Статическую страницу, и всё.

P1
На сайте с 01.12.2011
Offline
25
#2

Вот ещё способ... чтобы наверняка.


header("HTTP/1.x 404 Not Found");
header("Status: 404 Not Found");
@require_once($_SERVER['DOCUMENT_ROOT'].'/404.php');
exit();
K
На сайте с 01.08.2009
Offline
88
#3

Я делал только на PHP

от способа через htaccess отказался из-за того, что меняется введенный URL в адресной строке браузера, а мне хотелось бы чтобы пользователя никуда не перекидывало.

NU
На сайте с 19.02.2010
Offline
55
#4
Я делал только на PHP
от способа через htaccess отказался из-за того, что меняется введенный URL в адресной строке браузера, а мне хотелось бы чтобы пользователя никуда не перекидывало.

Куда перекидывало? Никакой URL не меняется, и при запросе ya.ru/123 этот же URL и останется, а выведется то, что в заданной странице для обработки 404-ошибок с кодом ответа 404.

K
На сайте с 01.08.2009
Offline
88
#5
NewUser2010:
Куда перекидывало? Никакой URL не меняется, и при запросе ya.ru/123 этот же URL и останется, а выведется то, что в заданной странице для обработки 404-ошибок с кодом ответа 404.

Проверил, и правда не перекидывает. Моя ошибка была в том, что был указан полный путь к html файлу (http://site.ru/....)

Cuck
На сайте с 02.06.2011
Offline
110
#6
phoen1x:
Вот ещё способ... чтобы наверняка.

header("HTTP/1.x 404 Not Found");
header("Status: 404 Not Found");
@require_once($_SERVER['DOCUMENT_ROOT'].'/404.php');
exit();

Делал так, что наверняка это точно.

ramnek
На сайте с 16.11.2008
Offline
48
#7
phoen1x:
Вот ещё способ... чтобы наверняка.

header("HTTP/1.x 404 Not Found");
header("Status: 404 Not Found");
@require_once($_SERVER['DOCUMENT_ROOT'].'/404.php');
exit();

А это где надо прописать? в 404.php?

NU
На сайте с 19.02.2010
Offline
55
#8
ramnek:
А это где надо прописать? в 404.php?

Чтобы такое прописать там, где надо, лучше спросить где-нибудь на форуме по программированию 😂.

P1
На сайте с 01.12.2011
Offline
25
#9
ramnek:
А это где надо прописать? в 404.php?

в 404.php вы делаете красивую заглушку с вариантами решения проблемы.

т.е. предлагаете воспользоваться поиском или начать просмотр с главной страницы...

Кстати, не заметил сразу, но в 404.php не надо писать:

<?php

header("HTTP/1.0 404 Not Found");
?>

там надо делать заглушку:

<?php

echo '<h1>Ошибка 404</h1>';
?>

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий