|
|
|
| Здравствуйте.
Столкнулся с проблемой, когда на сайте страница удалена или не существует, и при этом во время её посещения отображается пустая страница, сообщение о том что она не существует
Вот как этот механизм реализован
<?
$query = mysql_query("SELECT * FROM content WHERE namePage = '$url' ");
$show_content = mysql_fetch_assoc($query);
if ($show_content)
{
print $show_content["contentPage"];
}
else print "<p><h3>Ошибка 404.</h3> Страница не найдена</p>";
?>
|
Это не правильно, нужно каким то образом сделать так, что бы сервер выдавал ошибку 404, подскажите как это сделать | |
|
|
|
|
|
|
|
|
для: psychomc
(21.11.2013 в 17:09)
| | Спасибо, то что нужно | |
|
|
|
|
|
|
|
для: psychomc
(21.11.2013 в 17:09)
| |
<?
if (условие выполняется)
{
//
}
else
{
header("HTTP/1.0 404 Not Found");
}
?>
|
Не срабатывает, заливаю на хостинг, проверяю, пишет
HTTP/1.1 200 OK
Date: Thu, 21 Nov 2013 14:41:48 GMT
Server: Apache
X-Powered-By: PHP/5.3.3
X-SERVER: 73
Transfer-Encoding: chunked
Content-Type: text/html
|
| |
|
|
|
|
|
|
|
для: Den*s
(21.11.2013 в 18:44)
| | нужен весь код, а желательно сам файл скрипта | |
|
|
|
|
|
|
|
для: psychomc
(21.11.2013 в 19:08)
| |
<?
include_once("config/config.php");
include_once("inc/top_code.php");
$tableName = "content";
$current_url = mysql_real_escape_string($_SERVER['REQUEST_URI']);
//
$cur = explode("?", $current_url);
//
$query = mysql_query("SELECT * FROM $tableName WHERE namePage = '$url' ");
$content_show = mysql_fetch_assoc($query);
//
if ($content_show && $url && count($cur) < 2)
{
$text = $content_show["content"];
//print $content_show["content"];
//
//if ($url == "contacts") include_once("contact_form.php");
}
else
{
header("HTTP/1.0 404 Not Found");
//exit();
/*$sapi_name = php_sapi_name();
if ($sapi_name == 'cgi' || $sapi_name == 'cgi-fcgi') {
header('Status: 404 Not Found');
} else {
header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
}*/
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title><?=$title;?></title>
<meta content="<?=$keywords;?>" name="keywords" />
<meta content="<?=$description;?>" name="description" />
<? include_once("meta.php"); ?>
<link href="/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<? include_once("top.php"); ?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="40%" height="503" valign="bottom" background="images/center_left.jpg" style="background-position:top right; background-repeat:no-repeat;"> </td>
<td valign="top" background="images/fon2.jpg" style="background-position:top; background-repeat:no-repeat;">
<img src="images/space.png" width="910" height="5" />
<table width="910" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="100" valign="top"> </td>
<td valign="top" class="content">
<?
if ($text)
{
print $text;
if ($url == "contacts") include_once("contact_form.php");
}
else print "<p><h3>Ошибка 404.</h3> Страницы не существует</p>";
?>
</td>
<td width="190" align="right" valign="top"><? include_once("right_menu.php"); ?></td>
</tr>
</table>
</td>
<td width="60%" background="images/center_right2.jpg" style="background-position:top left; background-repeat:no-repeat;"> </td>
</tr>
</table>
<? include_once("bottom.php"); ?>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Den*s
(21.11.2013 в 19:13)
| | думаете я у вас просто так попросил файл скрипта? срочненько курить мануал по функции header. невооруженным взглядом видно что у вас в самом верху пустая строка до откр. тэга PHP. никакого вывода в браузер до использования header быть не должно. заодно почитайте что такое BOM | |
|
|
|
|
|
|
|
для: Den*s
(21.11.2013 в 19:13)
| | и обязательно в самый верх скрипта добавьте error_reporting(E_ALL); | |
|
|
|
|
2.5 Кб |
|
|
для: psychomc
(21.11.2013 в 22:57)
| | Мануал я читал, убрал в подключаемых страницах и вверху все пустые строки и пробелы.
Просто при копировании кода вставилось лишнее.
Файл во вложении. | |
|
|
|
|
|
|
|
для: Den*s
(22.11.2013 в 14:03)
| | Содержимое .htaccess
RewriteEngine on
RewriteBase /
RewriteRule ^([a-zA-Z0-9_-]+)$ inner.php?url=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ inner.php?url=$1
|
| |
|
|
|
|
|
|
|
для: Den*s
(23.11.2013 в 19:52)
| | Для реакции на на ошибки нужно прописать адреса к страницам, которые эти ошибки выдают.
Если у вас включен RewriteEngine, то можно прописать дальше такие директивы:
ErrorDocument 401 /error/401
ErrorDocument 403 /error/403
ErrorDocument 404 /error/404
ErrorDocument 500 /error/500
|
А в php, если, к примеру, запрос в базе ничего не дал, можно написать примерно так:
<?
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
include("notFound.php");
?>
|
Где можно со вкусом оформить свою страницу ошибки.
Или же явно генерировать переход на страницу ошибок:
<?
header("Location:".$mainlink."/error/404");
?>
|
| |
|
|
|
|
|
|
|
для: Deed
(23.11.2013 в 21:21)
| |
ErrorDocument 404 /error/404
|
Не поможет, так как ответ сервера 200, получается запись бесполезна
Далее
<?
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
include("notFound.php");
?>
|
Получается ответ сервера 200, просто по этой странице откроется страница с ошибкой.
Яндекс не даст удалить страницу в вебмастере, так как ответ страницы 200.
То есть в динамической странице выдать 404 ошибку сервера не возможно :( | |
|
|
|
|
|
|
|
для: Den*s
(25.11.2013 в 09:15)
| | Попробуй полный ее вариант использовать.
<?php header (getenv ("SERVER_PROTOCOL") . "404 not found", true, 404); ?>
|
Хотя наверняка что-то выводит данные до установки заголовка. Еще посмотреть про буферизированный вывод. | |
|
|
|