Как превратить HTTP 302 в 404 на PHP?

12 3
NL
На сайте с 29.01.2003
Offline
212
1665

Есть php-скрипт, который до отсылки HTTP-заголовков в зависимости от входных параметров решает что отдавать: контент или 404-ю ошибку. Сейчас в случае 404й сделано тупо:

else {
header("HTTP/1.0 404 Not Found");
exit;
}

Т.е. честно отдается 404й код на абсолютно пустой странице. Проблема в том, что хочется юзабилити, т.е. как-то переслать посетителя на специально заготовленную /404.htm, отдав при этом HTTP 404. Как это сделать?

Пробовал

 
header("Location: /404.htm", true, 404);

в этом случае скрипт все равно отдает 302 ответ.

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#1

header("Location: /404.php");

а уже в ней:

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

exit;

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
C
На сайте с 04.02.2005
Offline
288
#2

как-то через ж...

сначала 302, а потом 404

ну так сделайте

else {

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

..вывод контента 404 страницы... да хотя бы статикой.

exit;

}

NL
На сайте с 29.01.2003
Offline
212
#3

Не получается.

header("Location: /404.php"); вернет сразу 302й код, а нужен 404й.

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#4
Chukcha:
как-то через ж...
сначала 302, а потом 404
ну так сделайте
else {
header("HTTP/1.0 404 Not Found");
..вывод контента 404 страницы... да хотя бы статикой.
exit;
}

И ч0?

Кстати, вы уже знаете структуру CMS ТС, чтобы советовать ваш вариант? Не думали, что это будет по средине сайта? 🤪

---------- Добавлено 11.10.2012 в 16:06 ----------

NULL:
Не получается.
header("Location: /404.php"); вернет сразу 302й код, а нужен 404й.

Он сначала вернётся 302 это млин, обычный редирект, а потом бот или браузер получит 404.

Всё это нормально работает. Делаю во всех сайтах, никаких проблем нету.

NL
На сайте с 29.01.2003
Offline
212
#5

Chukcha, на 404.php сложный скрипт, не хочется его дублировать.

Неужели нет варианта кроме

else {

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

include("404.php");

exit;

}

?

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#6
NULL:
Chukcha, на 404.php сложный скрипт, не хочется его дублировать.
Неужели нет варианта кроме
else {
header("HTTP/1.0 404 Not Found");
include("404.php");
exit;
}
?

Есть, переделать структуру сайта, чтобы заголовок формировался ДО отдачи контента.

siv1987
На сайте с 02.04.2009
Offline
427
#7
header("Location: /404.htm", true, 404);

Об этом забудьте, конструкция неправильная.

Попробуйте в связке с ErrorDocument 404 /404.html

IL
На сайте с 20.04.2007
Offline
435
#8
NULL:
Chukcha, на 404.php сложный скрипт, не хочется его дублировать.

а зачем его дублировать? в варианте с include он ведь не дублируется?..

LEOnidUKG:
Есть, переделать структуру сайта, чтобы заголовок формировался ДО отдачи контента.

Вообще, судя по первому посту так и есть..

p.s. в таких случаях ещё можно ob_start() + ob_end_clean() использовать

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
[Удален]
#9

А что плохого в 302 или 301, а потом 404?

LEOnidUKG
На сайте с 25.11.2006
Offline
1755
#10
Miha Kuzmin (KMY):
А что плохого в 302 или 301, а потом 404?

В том, что это не по фейн-шую и всё.

12 3

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