header() 函數向客戶端發送原始的 HTTP 報頭。
認識到一點很重要,即必須在任何實際的輸出被發送之前調用 header() 函數(在 PHP 4 以及更高的版本中,您可以使用輸出緩存來解決此問題):
header php location實現網站301重定向的方法:
對于我們SEO人員來說,有的時候需要對網站進行重定向。一般來說,對網站重定向的http返回狀態碼是301和302兩種。下面365建站就通過實例來為你介紹一下怎樣通過PHP使用header+Location實現網站301重定向。
關于PHP網站的定向問題,在百度上面搜索的一中午,發現使用最多的就是使用“header+Location”的重定向方法。下面我給出最流行的代碼:
<?php header("Location: http://www.shchudeli.com"); exit; ?>
但是通過我對HTTP狀態碼查詢發現,通過以上代碼跳轉重定向后的返回碼是302狀態。我們先來看一下什么是302返回碼?搜索引擎返回302錯誤表示被請求的資源暫時轉移(Moved temporatily),然后會給出一個轉移后的URL,而瀏覽器在處理服務器返回的302錯誤時,原則上會重新建立一個TCP連接,然后再取重定向后 的URL的頁面;但是如果頁面存在于緩存中,則不重新獲取。但是,由于黑帽SEO濫用302重定向進行作弊,302重定向已經被視為垃圾信息,遭到各大搜索引擎的打擊。因此,上面的代碼返回302狀態是不完善的,也是存在被百度等搜索引擎K站的風險的。
請看第二種方法:先返回301狀態碼后再重定向。
<?php header('HTTP/1.1 301 Moved Permanently'); header(”Location: http://www.shchudeli.com”); exit; ?>
上面的這一段代碼可以說是解決了使用Location產生302狀態的問題,因此是比較完善的也是比較安全的網站重定向方法。就在準備收工的時候,我又突然發現了一段跳轉代碼,也是很不錯的,比這個更精簡,在這里我也為大家附上,一起分享。
<?php header("Location: http://www.shchudeli.com",TRUE,301);); exit; ?>
通過上面的這一行代碼就實現的網站的301重定向,并且高效、安全、可靠運行。
header("Location:*****.php")應該注意的幾個問題 :
header("Location:")作為php的轉向語句。其實在使用中,他有幾點需要注意的地方。
1、要求header前沒有任何輸出
但是很多時候在header前我們已經輸出了好多東 西了,此時如果再次header的話,顯然是出錯的,在這里我們啟用了一個ob的概念,ob的意思是在服務器端先存儲有關輸出,等待適當的時機再輸出,而 不是像現在這樣運行一句,輸出一句,發現header語句就只能報錯了。
具體的語句有: ob_start(); ob_end_clean();ob_flush();.........
2、在header("Location:")后要及時exit
否則他是會繼續執行的,雖然在瀏覽器端你看不到相應的數據出現,但是如果你進行抓包分析的話,你就會看到下面的語句也是在執行的。而且被輸送到了瀏覽器客戶端,只不過是沒有被瀏覽器執行為HTML而已(瀏覽器執行了header進行了轉向操作)。
所以,標準的使用方法是:
ob_start();
........
if ( something ){
ob_end_clean();
header("Location: yourlocation");
exit;
else{
..........
ob_flush(); //可省略
要想在header前有輸出的話,可以修改php.ini文件
output_handler =mb_output_handler
或 output_handler =on
Output Control 函數可以讓你自由控制腳本中數據的輸出。它非常地有用,特別是對于:當你想在數據已經輸出后,再輸出文件頭的情況。輸出控制函數不對使用 header() 或 setcookie(), 發送的文件頭信息產生影響,只對那些類似于 echo() 和 PHP 代碼的數據塊有作用。
如對本文有疑問,請提交到交流論壇,廣大熱心網友會為你解答??! 點擊進入論壇