Привет уважаемые программисты,
Прежде всего, мой сайт был недавно завершен, но программист отказался оказывать поддержку, сославшись на то, что он был частью контракта. Тем не менее, я просто хочу решить эту единственную проблему, и я могу управлять этим сайтом до будущего обновления.
Страницы сайтов имеют любой из следующих форматов:
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
) загружаются.
Спасибо.
Вы можете проверить существование файла с помощью 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();
}
}
Других решений пока нет …