header() 函數(shù)向客戶端發(fā)送原始的 HTTP 報(bào)頭。
認(rèn)識(shí)到一點(diǎn)很重要,即必須在任何實(shí)際的輸出被發(fā)送之前調(diào)用 header() 函數(shù)(在 PHP 4 以及更高的版本中,您可以使用輸出緩存來(lái)解決此問(wèn)題):
header php location實(shí)現(xiàn)網(wǎng)站301重定向的方法:
對(duì)于我們SEO人員來(lái)說(shuō),有的時(shí)候需要對(duì)網(wǎng)站進(jìn)行重定向。一般來(lái)說(shuō),對(duì)網(wǎng)站重定向的http返回狀態(tài)碼是301和302兩種。下面365建站就通過(guò)實(shí)例來(lái)為你介紹一下怎樣通過(guò)PHP使用header+Location實(shí)現(xiàn)網(wǎng)站301重定向。
關(guān)于PHP網(wǎng)站的定向問(wèn)題,在百度上面搜索的一中午,發(fā)現(xiàn)使用最多的就是使用“header+Location”的重定向方法。下面我給出最流行的代碼:
<?php header("Location: http://theartemis.cn"); exit; ?>
但是通過(guò)我對(duì)HTTP狀態(tài)碼查詢發(fā)現(xiàn),通過(guò)以上代碼跳轉(zhuǎn)重定向后的返回碼是302狀態(tài)。我們先來(lái)看一下什么是302返回碼?搜索引擎返回302錯(cuò)誤表示被請(qǐng)求的資源暫時(shí)轉(zhuǎn)移(Moved temporatily),然后會(huì)給出一個(gè)轉(zhuǎn)移后的URL,而瀏覽器在處理服務(wù)器返回的302錯(cuò)誤時(shí),原則上會(huì)重新建立一個(gè)TCP連接,然后再取重定向后 的URL的頁(yè)面;但是如果頁(yè)面存在于緩存中,則不重新獲取。但是,由于黑帽SEO濫用302重定向進(jìn)行作弊,302重定向已經(jīng)被視為垃圾信息,遭到各大搜索引擎的打擊。因此,上面的代碼返回302狀態(tài)是不完善的,也是存在被百度等搜索引擎K站的風(fēng)險(xiǎn)的。
請(qǐng)看第二種方法:先返回301狀態(tài)碼后再重定向。
<?php header('HTTP/1.1 301 Moved Permanently'); header(”Location: http://theartemis.cn”); exit; ?>
上面的這一段代碼可以說(shuō)是解決了使用Location產(chǎn)生302狀態(tài)的問(wèn)題,因此是比較完善的也是比較安全的網(wǎng)站重定向方法。就在準(zhǔn)備收工的時(shí)候,我又突然發(fā)現(xiàn)了一段跳轉(zhuǎn)代碼,也是很不錯(cuò)的,比這個(gè)更精簡(jiǎn),在這里我也為大家附上,一起分享。
<?php header("Location: http://theartemis.cn",TRUE,301);); exit; ?>
通過(guò)上面的這一行代碼就實(shí)現(xiàn)的網(wǎng)站的301重定向,并且高效、安全、可靠運(yùn)行。
header("Location:*****.php")應(yīng)該注意的幾個(gè)問(wèn)題 :
header("Location:")作為php的轉(zhuǎn)向語(yǔ)句。其實(shí)在使用中,他有幾點(diǎn)需要注意的地方。
1、要求header前沒(méi)有任何輸出
但是很多時(shí)候在header前我們已經(jīng)輸出了好多東 西了,此時(shí)如果再次header的話,顯然是出錯(cuò)的,在這里我們啟用了一個(gè)ob的概念,ob的意思是在服務(wù)器端先存儲(chǔ)有關(guān)輸出,等待適當(dāng)?shù)臅r(shí)機(jī)再輸出,而 不是像現(xiàn)在這樣運(yùn)行一句,輸出一句,發(fā)現(xiàn)header語(yǔ)句就只能報(bào)錯(cuò)了。
具體的語(yǔ)句有: ob_start(); ob_end_clean();ob_flush();.........
2、在header("Location:")后要及時(shí)exit
否則他是會(huì)繼續(xù)執(zhí)行的,雖然在瀏覽器端你看不到相應(yīng)的數(shù)據(jù)出現(xiàn),但是如果你進(jìn)行抓包分析的話,你就會(huì)看到下面的語(yǔ)句也是在執(zhí)行的。而且被輸送到了瀏覽器客戶端,只不過(guò)是沒(méi)有被瀏覽器執(zhí)行為html而已(瀏覽器執(zhí)行了header進(jìn)行了轉(zhuǎn)向操作)。
所以,標(biāo)準(zhǔn)的使用方法是:
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 函數(shù)可以讓你自由控制腳本中數(shù)據(jù)的輸出。它非常地有用,特別是對(duì)于:當(dāng)你想在數(shù)據(jù)已經(jīng)輸出后,再輸出文件頭的情況。輸出控制函數(shù)不對(duì)使用 header() 或 setcookie(), 發(fā)送的文件頭信息產(chǎn)生影響,只對(duì)那些類似于 echo() 和 PHP 代碼的數(shù)據(jù)塊有作用。
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇