За последние 24 часа нас посетили 38590 программистов и 8127 роботов. Сейчас ищут 1736 программистов ...

неверный ответ (200) на установку ответа 404

Тема в разделе "PHP для новичков", создана пользователем ufaclub, 25 июл 2023.

  1. ufaclub

    ufaclub Активный пользователь

    С нами с:
    29 авг 2011
    Сообщения:
    56
    Симпатии:
    0
    PHP 8.2

    на не существующую страницу вывожу шаблон

    PHP:
    1. else {
    2.    
    3. header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    4. $title="404 Страница не найдена";
    5. $description="Страница не найдена 404 Not Found";
    6. $inc_page="inc/404.php";
    7. };


    вот в нем все работает и визуально страница оформлена как 404 и заголовок и описание все верно. А проверяю на ответ сервера - код ответа 200


    Код (Text):
    1. Код статуса HTTP    200 OK
    2. Время ответа сервера    61 мс
    3. Кодировка    UTF-8(unicode-1-1-utf-8, UTF8)
    4. Размер страницы    12,59 КБ
    5.  
    6.     Server: nginx-reuseport/1.21.1
    7.     Date: Tue, 25 Jul 2023 10:34:14 GMT
    8.     Content-Type: text/html; charset=UTF-8
    9.     Connection: keep-alive
    10.     Keep-Alive: timeout=30
    11.     Vary: Accept-Encoding
    12.     X-Powered-By: PHP/8.2.7
    13.     Content-Length: 12888


    причем побывал по разному менял на header("HTTP/1.0 404 Not found");

    все равно так же ответ 200

    я так понимаю у меня проблема в .htaccess

    Код (Text):
    1. RewriteEngine on
    2. Errordocument 404 /404.php
    3. RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    4. RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
    5. RewriteCond %{HTTPS} off
    6. RewriteCond %{HTTP:X-Forwarded-Proto} !https
    7. RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    8. RewriteRule ^(robots\.txt)$ robots.php [L]
    9. RewriteRule ^(sitemap\.xml)$ sitemap.xml.php [L]
    10. RewriteRule ^(sitemap-obj\.xml)$ sitemap-obj.xml.php [L]
    11. RewriteRule ^(yandex\.xml)$ yandex.xml.php [L]
    12. RewriteRule ^(yandex-all\.xml)$ yandex.xml.all.php [L]
    13. RewriteRule ^(yml\.xml)$ yml.all.php [L]
    14. RewriteRule ^(yml-fat\.xml)$ yml.fat.php [L]
    15. RewriteRule ^(avito\.xml)$ avito.php [L]
    16. RewriteRule ^(avito\.jpg)$ avito-jpg.php [L]
    17. RewriteCond %{SCRIPT_FILENAME} !-f
    18. RewriteCond %{SCRIPT_FILENAME} !-d
    19. RewriteRule ^(.*) index.php?do=/$1
    вся система самописная

    но почему то игнорируется правила установки ответа header("HTTP/1.0 404 Not found");

    подскажите пожалуйста в чем может быть причина?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    я в таких случаях отлаживаю от простого к сложному. например, убрал бы всё из файла, оставил бы только
    Код (Text):
    1. <?php header('HTTP/1.0 404 Not Found');
    проверил результат, усложнил бы до
    Код (Text):
    1. <?php header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    проверил результат, усложнил бы еще... проверил
    ...
    возможно у тебя где-то до этого происходит паразитический "Header already sent" т.е. что-то уже выведено. поэтому твой header не работает! отлаживай.
     
  3. ufaclub

    ufaclub Активный пользователь

    С нами с:
    29 авг 2011
    Сообщения:
    56
    Симпатии:
    0
    да походу мусор какой то был. скопировал другой код такой же и все заработало

    header('HTTP/1.1 404 Not Found', true, 404); спасибо за совет!
     
  4. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    скорее всего где-то выше 200-ый заголовок отдавался.
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    @don.bidon заголовки отсылаются до вывода. Если сделать echo, то первым делом неявно вышлется статус 200 и только следом уже контент из echo.
    Отсюда эта вечная "проблема" с невидимым BOM в начале файла или с переводом строки после финального ?> в инклуде. Случайный высер в поток вывода — прощай контроль над заголовками.
     
  6. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    Если бы там там был вывод, то
    PHP:
    1. header('HTTP/1.1 404 Not Found', true, 404);
    всё равно бы не отработал, ну и у нормальных людей ворнинг бы высыпал )
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    так он и не отработал. тема об этом )))
    --- Добавлено ---
    только когда автор переписал всё начисто, неведомый вывод-по-неосторожности был ликвидирован и всё починилось.
    --- Добавлено ---
    или ты понял моё сообщение как "оставить всё на месте, а переписать только header()" ???
    каждый раз удивляюсь как люди по разному читают один и тот же текст )))
     
  8. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    автор упомянул только
    PHP:
    1. header('HTTP/1.1 404 Not Found', true, 404);
    , я плясал от этого ;)
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    боюсь уже продолжать эту тему ))) но исходная конструкция
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    рабочая. она прямо из документации по header. причина была где-то вне её.