http_response_code(200) не работает с ErrorDocument 404

У меня проблема с функцией php http_response_code(). Я установил ErrorDocument 404 в файле htaccess в корневом каталоге моего веб-сайта, чтобы перенаправлять каждый неправильный вызов в файл php. В этом php-файле я хотел бы в некоторых случаях установить заголовок ответа на код 200 OK. Но это не работает. Chrome всегда говорит мне, что код состояния — 404.

Это содержимое моего файла .htaccess:

ErrorDocument 404 /abc.php

Это содержимое моего простого файла abc.php:

<?php   

http_response_code(200); 

?>

Test

Если я использую другой код, например. 201, 301 или что-то еще, это работает. Только 200 не работает.

Вот ссылка на пример: http://test.foxpage.de/abdfgsdfgsdfgsdfgsdf

Кто-нибудь может мне помочь?

Спасибо!!


person DocMacFoxx    schedule 12.10.2017    source источник
comment
Вы используете какой-либо фреймворк?   -  person Karthick Kumar    schedule 12.10.2017
comment
Нет. Для тестового случая я создал только 2 тестовых файла с содержимым, которое вы видите выше. И это не работает.   -  person DocMacFoxx    schedule 12.10.2017
comment
Может ли это быть настройка в apache conf или php.ini?   -  person DocMacFoxx    schedule 12.10.2017
comment
Для информации, у меня есть эта версия: 7.0.22-0ubuntu0.16.04.1   -  person DocMacFoxx    schedule 12.10.2017
comment
когда вы пытаетесь запустить этот URL-адрес test.foxpage.de/abdfgsdfgsdfgsdfgsdf . он попытается найти файл abdfgsdfgsdfgsdfgsdf(.php) или (.html) в корневом пути вашего веб-сервера. который он не найдет, покажет, что он даст ответ 404, но в вашем .htaccess вы настроили отображение abc.php при возникновении ответа 404. но когда вы запустите abc.php, он даст вам ответ 200   -  person Karthick Kumar    schedule 12.10.2017
comment
Это правильно. Но я хочу, чтобы URL-адрес test.foxpage.de/abdfgsdfgsdfgsdfgsdf показывал содержимое моего abc.php и код состояния ответа 200. Но я доставляю код 404. Когда я пробую это в своей локальной установке xampp, он работает отлично. Я не знаю, почему это не работает в моем веб-пространстве правильно :(   -  person DocMacFoxx    schedule 12.10.2017
comment
Конечно, если это 404, вам хотелось бы получить код ответа 404? Вероятно, вы не хотите сообщать каждому используемому вами сканеру (например, роботу Googlebot), что каждый URL-адрес на вашем сайте найден и, возможно, проиндексирован? Я мог бы дать ссылку на ваш сайт www.yoursite.net/badgerfondler, и Google вполне мог бы его проиндексировать, так как вы вернули 200.   -  person CD001    schedule 12.10.2017
comment
Возможно, это не лучший метод, но я использую его для рерайтинга. В базе данных я настраиваю, какие URL-адреса хороши (например, / новости, / гостевая книга, ...). На этих страницах должен отображаться контент, а все остальные URL-адреса должны возвращать 404. Таким образом, только хорошие URL-адреса с контентом должны возвращать 200. Из-за этого я должен установить код состояния внутри моих php-файлов. Раньше у меня это отлично работало, но на моем новом веб-сервере это не работает.   -  person DocMacFoxx    schedule 12.10.2017


Ответы (2)


Я думаю, что это ошибка/особенность Apache. Вы не можете переопределить код состояния на 200 напрямую из ErrorDocument.

Тем не менее, я думаю, что этот хак должен сработать для вас, если вы можете жить с постоянным ответом 200 на свой ErrorDocument (что ИМХО немного страшно, и что-то, что бот ненавидит).

 Redirect 200 /abc.php
 ErrorDocument 404 /abc.php

Подробнее см. в этом ответе.

person Aron Cederholm    schedule 12.10.2017
comment
Извините, но мне не нужен постоянный код состояния 200. Это настолько запутанно, что один и тот же скрипт отлично работает на моей локальной установке apache/php, но не на моем веб-сервере :( - person DocMacFoxx; 12.10.2017

Это работает в первой строке: Как я могу заменить Apache HTTP код с 404 по 200

<?php header("Status: 200 OK"); ?>

Этот код должен быть помещен вверху файла .php в первой строке кода. Поисковые системы, сканеры, браузеры и все, кто заходит на сайт, увидят страницу errordocument 404 как заголовок 200.

Заголовок 200 означает, что страница существует. Google будет сканировать и индексировать сайты со статусом заголовка 200.

person human    schedule 19.02.2020