我有一个显示各种元素的页面,即使它从数据库调用的id不存在或被删除(这会引发各种丑陋的错误以及搜索引擎继续列出不存在的页面)。
如果$ id不存在,您是否可以修改下面显示的页面代码的第一部分以发送404(或至少发送到包含404标题的projecterror.php)?非常感谢!
<?php
include_once("includes/linkmysql.php");
$adda=$_GET['a'];
$cont=$_GET['c'];
$select="SELECT * FROM projects where id='$id'";
$qselect = mysql_query($select);
while ($row = mysql_fetch_array($qselect)) {
Matt Wilson由于原始评论而提出的以下修改 Vivek Goel会生成有效的条目,正确显示页面,但不存在的页面会显示此修改后的代码下方的错误:
<?php
include_once("includes/linkmysql.php");
$adda=$_GET['a'];
$cont=$_GET['c'];
$select="SELECT * FROM projects where id='$id'";
$qselect = mysql_query($select);
if( mysql_num_rows( $qselect ) === 0 )
{
header("HTTP/1.1 301 Moved Permanently");
header( 'Location: http://examplesite.domain/errorpage' ) ;
exit;
}
while ($row = mysql_fetch_array($qselect)) {
上述修改导致的错误:
Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 22
Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 23 Lines 22 and 23 are the two header lines in your example above
第22行和第23行是两条标题行,如下所示:
header("HTTP/1.1 301 Moved Permanently");
header( 'Location: http://examplesite.domain/errorpage' ) ;
答案 0 :(得分:28)
我有更简单的解决方案 - 它很简单!只需在php源代码中添加此命令 :
ob_start();
这将开始缓冲输出,因此在PHP脚本结束之前(或直到您手动刷新缓冲区)才会真正输出任何内容 - 并且在此之前也不会发送任何标头! 所以您不需要重新组织代码,只需在代码的最开头添加此行即可: - )
答案 1 :(得分:2)
(浏览器中的文本)。 检查你的模型是否有效。 如果id无效,请重定向到您的错误页面
header("HTTP/1.1 301 Moved Permanently");
header( 'Location: http://examplesite.domain/errorpage' ) ;
答案 2 :(得分:0)
在使用php header()重定向之前,不应将任何内容发送到浏览器。如果标题已经发送,您可以尝试使用javascript重定向。
if( mysql_num_rows( $qselect ) === 0 )
{
echo "<script type='text/javascript'>window.location.href='{http://examplesite.domain/errorpage}'</script>";
exit;
}
但我不确定javascript重定向是否适合搜索引擎