Настройка 404 ошибки в php

360
26 апреля 2017, 13:12

Сейчас на сайте, если происходит запрос к несуществующей статье или разделу текстом вывозится, что такой статьи или раздела не существует, но сервер отдает 200. Как настроить для таких страниц 404 ошибку? Нагуглить получилось такую конструкцию

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

Но я не понимаю, куда ее добавить нужно и как использовать.
Запрос к mysql выглядит так

<?php
 function get_articles($link){
   $sql  = 'SELECT * FROM articles WHERE alias_cat ="'.$_GET['id_cat'].'" AND alias ="'.$_GET['id'].'"';
   $result = mysqli_query($link, $sql);
   $articles= array();
   while($row = mysqli_fetch_assoc($result)) {
       $articles[] = $row;
   }
   return $articles;
 }
?>

кусок php код на странице статьи так:

<?php
   $articles = get_articles($link);
 ?>
 <?php if (count($articles) ===0 ) : ?>
   <h1 class="h1">Страница не найдена</h1>
 <?php else: ?>
 <?php foreach($articles as $article): ?>
   <h1 class="h1"><?=$article['name']?></h1>
 <?php endforeach; ?>
<?php endif; ?>  

При попытке добавить конструкцию в любой участок кода выдает ошибку о том, что header уже задан. Знаю, что добавлять нужно в самое начало, но ведь сначала нужно проверить существует или нет страница, а для этого подключиться к базе. Или я что-то не так понимаю?

Answer 1

Проверка должна быть до вывода страницы, работа скрипта должна прерываться, иначе выведет остаток информации.

<?php
    if(count($articles) === 0)
    {
        header("HTTP/1.0 404 Not Found");
        include("upload/404.php");
        die();
    }    
?> 

Строка include("upload/404.php"); подгружает нужную страницу для показа.

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

READ ALSO
Почему $_POST всегда существет?

Почему $_POST всегда существет?

Проверяю в коде php, задан ли $_POST через isset($_POST)

213
Yii2 сессия очищается после авторизации

Yii2 сессия очищается после авторизации

ЗдравствуйтеДелаю простой интернет-магазин

370
Как написать такой .htaccess?

Как написать такой .htaccess?

Как написать в правилоhtaccess, чтобы при заходе на сайт переправляло на public/index

173