Ошибка 404 Страница не работает для неправильных динамических страниц

Привет уважаемые программисты,

Прежде всего, мой сайт был недавно завершен, но программист отказался оказывать поддержку, сославшись на то, что он был частью контракта. Тем не менее, я просто хочу решить эту единственную проблему, и я могу управлять этим сайтом до будущего обновления.

Страницы сайтов имеют любой из следующих форматов:

http://example.com/index.php?p=course&cid=xx
http://example.com/index.php?service&sid=xx
http://example.com/index.php?p=about-us

так далее

У меня есть страница ошибки 404 в расположении:

/include/404.php

и он будет отображаться как

http://example.com/index.php?p=404.php

Теперь я хочу настроить страницу ошибки 404, чтобы она отображалась, когда неправильная страница говорит:
http://example.com/index.php?p=about-us2.php

Когда неправильная страница введена, вот что появляется:

Warning: include(include/about-us2.php): failed to open stream: No such file or directory in /home/hanpan5/public_html/testing/index.php on line 127

Warning: include(include/about-us2.php): failed to open stream: No such file or directory in /home/hanpan5/public_html/testing/index.php on line 127

Warning: include(): Failed opening 'include/about-us2.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/hanpan5/public_html/testing/index.php on line 127

Ранее я добавил код 404 в .htaccess, однако он влиял на страницы хостинга блогов на http://blog.example.com
Когда код был удален из .htaccess, страницы блога снова работали нормально.

Я также заметил, что в index.php есть несколько кодов:

<div class="body">

<?php include('include/menu.php'); ?>

<?php
if(!isset($_GET['p']) && @$_GET['p'] == '')
{
include('include/slider.php'); ?>

<?php include('include/services.php'); ?>

<?php include('include/strategy.php'); ?>

<?php include('include/testimonial.php');
include('include/twitterfeeds.php');
}else
{
$p = $_GET['p'];
include('include/'.$p.'.php');
}
?>

<?php include('include/footer.php'); ?>

</div>

Есть ли в любом случае, я могу добавить include('include/404.php'); на утверждение if выше, чтобы помочь в перенаправлении. Или что я могу сделать, чтобы решить эту проблему?

С нетерпением жду вашей помощи.

Заранее большое спасибо.

/ ** Редактировать 1 после первого ответа @ DaveG ** /
Здравствуйте, DaveG, это моя текущая реализация вашего решения:

<div class="body">

<?php

include('include/menu.php');

if(isset($_GET['p']))
{
$p = $_GET['p'];
if(!file_exists('include/'.$p.'.php'))
{
header('HTTP/1.0 404 Not Found');
include('include/404.php');
exit();
}
}
else

if(!isset($_GET['p']) && @$_GET['p'] == '')
{
include('include/slider.php'); ?>

<?php include('include/services.php'); ?>

<?php include('include/strategy.php'); ?>

<?php include('include/testimonial.php');
include('include/twitterfeeds.php');
}
else
if(isset($_GET['p']))
{
$p = $_GET['p'];
include('include/'.$p.'.php');
}
?>

<?php include('include/footer.php'); ?>

</div>

Только индексная страница (/index.php) загружается полностью.

Однако файлы, заканчивающиеся, например, /index.php?p=course&cid=13 а также
/index.php?p=abc не загружаются полностью. Только меню (menu.php) и нижний колонтитул (footer.php) загружаются.

Спасибо.

0

Решение

Вы можете проверить существование файла с помощью file_exists()-функция php (http://php.net/manual/en/function.file-exists.php) в вашем index.php, после чего вы можете вернуть код 404 с помощью:

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

Будьте осторожны: это должно быть сделано в качестве первой команды вывода, поэтому сначала проверьте существование, затем верните заголовок, а затем продолжите остальную часть кода!

В целом:

if(isset($_GET['p']))
{
$p = $_GET['p'];
if(!file_exists('include/'.$p.'.php'))
{
header('HTTP/1.0 404 Not Found');
include('include/404.php');
exit();
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]