PHP Page redirect problem - Cannot modify header information
本问题已经有最佳答案,请猛点这里访问。
我有一个页面,显示各种元素,即使它从数据库调用的ID不存在或被删除(这会引发各种各样的丑陋错误,搜索引擎会继续列出不存在的页面)。
如果$id不存在,您是否可以修改下面显示的页面代码的第一部分以发送404(或者至少发送到projecterror.php,该文件有404个标题)?多谢!
1 2 3 4 5 6 7 | <?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会生成正确显示页面的有效条目,但不存在的页面会显示此修改代码下的错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?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)) { |
上述修改产生的错误:
1 2 | 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行是两个标题行,如下所示:
1 2 |
我有更简单的解决方案给你-很简单!只需在php源文件的开头添加以下命令:
1 |
这将开始缓冲输出,以便在PHP脚本结束(或手动刷新缓冲区之前)之前不会真正输出任何内容,并且在那之前也不会发送任何头文件!所以您不需要重新组织代码,只需在代码的开头添加这一行,就可以了:—)
在发送任何要查看的内容(浏览器中的文本)之前。检查您的模型是否有效。如果ID无效,请重定向到错误页
1 2 |
在使用php header()重定向之前,不应将任何内容发送到浏览器。如果邮件头已经发送,您可以改为尝试javascript重定向。
1 2 3 4 5 | if( mysql_num_rows( $qselect ) === 0 ) { echo"<script type='text/javascript'>window.location.href='{http://examplesite.domain/errorpage}'"; exit; } |
但我不确定javascript重定向是否对搜索引擎友好