2012-08-31 36 views
-1

我已經創建了301從PHP重定向。以下是我的代碼重定向網址。警告:無法修改標題信息 - 標題已發送的PHP 301重定向

$current_url = substr($redirect_url, 11); 
$sqlr = "SELECT old_url, new_url FROM cscart_301_redirection WHERE old_url = '$current_url' "; 
$resultr = mysql_query($sqlr); 
$rowr = mysql_fetch_array($resultr); 
$newurl = $rowr['new_url']; 

if(mysql_num_rows($resultr)>0) 
{ 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header ('Location: '.$host.$newurl); 
} 

但是當代碼直播服務器上運行,我收到

警告:不能更改頭信息 - 已經 這個錯誤發送了頭。請讓我知道我在做什麼錯了?

感謝

+0

在開頭'<?php'標籤上面是否有換行符? – mobius

+0

在<?php之前沒有newlinw或在 absolutek

+1

之後有任何空格錯誤/警告消息應該包含文件名和行號(例如, '警告:無法修改頭信息 - 已在第4行中的/home/volker/.htdocs/foo.php(由/home/volker/.htdocs/foo.php:2開始的輸出)發送的頭文件。請發佈您收到的完整消息。 – VolkerK

回答

2

通過在if條件寫入ob_start()錯誤通常是由前或開盤後有空格和關閉PHP標籤(<?php . . . ?>

試試下面的代碼「已經發送了頭」 。 ob_start() method將打開輸出緩衝。當輸出緩衝處於活動狀態時,腳本中不會輸出任何輸出(標題除外),而是將輸出存儲在內部緩衝區中。

$current_url = substr($redirect_url, 11); 
$sqlr = "SELECT old_url, new_url FROM cscart_301_redirection WHERE old_url = '$current_url' "; 
$resultr = mysql_query($sqlr); 
$rowr = mysql_fetch_array($resultr); 
$newurl = $rowr['new_url']; 

if(mysql_num_rows($resultr)>0) 
{ 
    ob_start(); 
    header ('HTTP/1.1 301 Moved Permanently'); 
    header ('Location: '.$host.$newurl); 
    die; 
} 
+0

我已經使用這段代碼,但仍然沒有用,是否有任何其他方式來刪除此錯誤 – absolutek

+0

非常感謝你的解決方案工作。非常感謝! – absolutek

-1
警告:不能更改頭信息 - 已經被( 輸出發送了頭開始在 /home/indianet/public_html/var/compiled/customer/%%45^45E^45E480CD%%index.tpl。 pH值號碼:)在/home/indianet/public_html/var/compiled/customer/%%FD^FD1^FD153A02%%top.tpl.php 在線路32

在第9行線在執行top.tpl.php中第32行的標頭函數之前,將腳本%%45^45E^45E480CD%%index.tpl.ph‌​p輸出發送到客戶端。

一個http效應初探看起來像

header1 
header2 
header3 
<--empty line--> 
body 
body 
body 

即一旦內容被髮送到客戶端,PHP將發送的所有標題加上「空行」,有沒有辦法讓回到頭部分(一旦將響應頭髮送給客戶端,就不能「撤消」將響應頭與響應頭分開的空行)。 您需要output buffering,即php儘可能長時間地保留repsonse的內容/正文。或者 - 更明智 - 以某種方式構建腳本,即在生成輸出之前處理標題。在重定向的情況下,無論如何說「你在url上找到內容,但是嘿,這裏是內容」並沒有多大意義。

相關問題