Проблема перенаправления PHP-страницы – Невозможно изменить информацию заголовка

У меня есть страница, которая отображает различные элементы, даже если идентификатор, который он вызывает из базы данных, не существует или был удален (что вызывает всевозможные уродливые ошибки, а поисковые системы продолжают перечислять несуществующие страницы).

Можете ли вы изменить первую часть приведенного ниже кода страницы, чтобы отправить 404 (или, по крайней мере, в projecterror.php с 404 заголовками), если $ id не существует? Большое спасибо!

<?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)) { 

Следующая модификация, любезно предложенная Мэттом Уилсоном в результате исходного комментария 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' ) ; 

У меня гораздо проще для вас – это просто! Просто добавьте эту команду в самом начале источника php:

 ob_start(); 

Это начнет буферизацию вывода, так что ничего не будет выдано до тех пор, пока скрипт PHP не закончится (или пока вы не сбросите буфер вручную), а также до тех пор не будут отправлены заголовки! Поэтому вам не нужно реорганизовывать свой код , просто добавьте эту строку в самом начале вашего кода, и вот что 🙂

перед отправкой любой вещи для просмотра (текст в браузере). проверьте, соответствует ли ваша модель, если id действителен или нет. если id недействителен, перенаправление на страницу с ошибкой

 header("HTTP/1.1 301 Moved Permanently"); header( 'Location: http://examplesite.domain/errorpage' ) ; 

Контент не должен отправляться в браузер перед использованием перенаправления php header (). Вы можете попробовать перенаправить javascript, если заголовки уже отправлены.

 if( mysql_num_rows( $qselect ) === 0 ) { echo "<script type='text/javascript'>window.location.href='{http://examplesite.domain/errorpage}'</script>"; exit; } 

Но я не уверен, что переадресация javascript является поисковой системой.