麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

使用PHP進行HTTP重定向(301,302)

2024-09-04 11:50:18
字體:
來源:轉載
供稿:網友

在Google里搜“PHP 重定向”,這篇日志的排名在第四。但是這篇寫得實在太爛了…重寫一篇…

什么是HTTP重定向?

當你訪問www.yegle.net時,地址欄的地址會自動變成yegle.net。當你訪問ye.gl的時候,地址欄的地址會變成yegle.net。這就是HTTP重定向

一個HTTP請求,返回的HTTP Response Header里,第一行是HTTP的狀態碼。正常情況下,HTTP請求返回的狀態碼是200 OK。
正常的HTTP請求,返回200 OK:

< HTTP/1.1 200 OK
< Date: Fri, 16 Jul 2010 11:21:10 GMT
< Server: Apache
< X-Powered-By: PHP/5.2.4-2ubuntu5.10
< Set-Cookie: PHPSESSID=7f86ed2e5a4750275e98971773ac88ab; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Set-Cookie: wassup=ZjVjMWExMjZjNmIxNzU1NDBhZjU0MmM5MzhmYjllZDQ6OjEyNzkyODE5NzE6Ojo6MjAwMTozODg6ZjAwMDo6ZTZmOjoyMDAxOjM4ODpmMDAwOjplNmY%253D; expires=Fri, 16-Jul-2010 12:11:11 GMT; path=/
< X-Pingback: http://yegle.net/xmlrpc.php
< Vary: Accept-Encoding
< Transfer-Encoding: chunked
< Content-Type: text/html; charset=UTF-8
<

其他的比較知名的還有例如:

404 Not Found
301 Moved Permanently
302 Found
500 Internal Server Error
HTTP重定向就是通過301和302兩種狀態碼來實現的。

302是臨時重定向的意思。表示被訪問頁面因為各種需要被臨時跳轉到其他頁面。具體的例子是訪問 http://yegle.net/recursion.php

< HTTP/1.1 302 Found
< Date: Fri, 16 Jul 2010 11:26:48 GMT
< Server: Apache
< X-Powered-By: PHP/5.2.4-2ubuntu5.10
< Location: http://yegle.net/recursion.php
< Cache-Control: max-age=600
< Expires: Fri, 16 Jul 2010 11:36:48 GMT
< Vary: Accept-Encoding
< Content-Length: 0
< Content-Type: text/html
<

瀏覽器在收到302 Found的狀態碼之后會在返回的HTTP Response Header中查找Location字段,然后訪問對應地址。在這個例子中,瀏覽器就會訪問 http://yegle.net/recursion.php (嗯這是一個遞歸,你懂的…)

301是永久重定向。這樣的例子很好找。例如 http://google.com

< HTTP/1.1 301 Moved Permanently
< Location: http://www.google.com/
< Content-Type: text/html; charset=UTF-8
< Date: Fri, 16 Jul 2010 11:29:07 GMT
< Expires: Sun, 15 Aug 2010 11:29:07 GMT
< Cache-Control: public, max-age=2592000
< Server: gws
< Content-Length: 219
< X-XSS-Protection: 1; mode=block
<

同樣,瀏覽器在發現301的狀態碼之后會查找Location字段,然后訪問那個地址。

Location字段的格式很隨意,既可以是絕對地址,也可以是相對地址,還可以是相對根目錄的地址。以下Location字段都是合法的:

Location: http://yegle.net/
Location: /test/index.php
Location: index.php
Location: ../index.php

301重定向和302重定向在SEO以及緩存上是有非常大區別的。

對于SEO也就是搜索引擎優化,一個頁面302重定向到另一個頁面,新頁面的PageRank不會受原頁面影響。而一個頁面301重定向到另一個頁面,原頁面的PageRank會被傳遞到新頁面。所以對于一個網站進行域名轉換,最好的方法就是使用301重定向,在經過一段時間之后可以不損失PR地將全站轉移到新域名下。

對于HTTP代理服務器例如squid來說,如果一個頁面是302重定向到新頁面并且沒有指定Expire HTTP頭,squid將不緩存這個信息,也就是說每次用戶通過代理請求時都會重新獲取一遍。而對于301重定向,squid可以將結果緩存以便快速響應下一個請求相同頁面的用戶。

PHP里的302重定向非常簡單,只要在返回的HTTP Response Header里添加Location字段,PHP將自動返回302狀態碼。例如:

< ?php
header("Location: http://yegle.net/recursion.php");
?>
這段代碼將自動重定向到http://yegle.net/recursion.php

而301重定向則稍微有點復雜,需要直接將301狀態碼用header函數返回給用戶。例如:

< ?php
    header( "HTTP/1.1 301 Moved Permanently" );
    header( "Location: http://yegle.net/" );
?>
注意的是,跳轉不是在收到response header的時候馬上進行,也就是說頁面的剩余內容會被下載來之后瀏覽器才會跳轉。新手常犯的一個錯誤是,在邏輯判斷時對符合條件的情況進行header跳轉之后,忘了在之后加上exit(),導致錯誤。例如,用user_login()判斷用戶是否進行了登錄,如果未登錄則跳轉到登錄頁面。代碼如下:

if(!user_login()){
    header("Location:login.php");
}
//display contents for login users.
這里,容易以為header之后這段代碼就結束了,沒有在header之后使用exit()。后面的代碼繼續被執行,導致未登錄用戶看到了已登錄用戶才能看到的內容。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久性生活免费视频 | 欧美成人精品一区二区男人小说 | 一区国产视频 | 91成人在线网站 | 色婷婷久久久亚洲一区二区三区 | 毛片视频网站 | 深夜免费观看视频 | av电影网站在线 | 国产乱子视频 | 欧美中文日韩 | 精品国产91久久久久久久妲己 | 国产九色在线观看 | 99精品国产小情侣高潮露脸在线 | 欧美一级做一级爱a做片性 久久久资源网 | 日韩一级电影在线观看 | 成人 精品 | 天天骑夜夜操 | 91一级毛片 | 色人阁在线视频 | 九一国产精品 | 日韩视频在线视频 | 99精品视频在线导航 | av之家在线观看 | 国产午夜网 | 成年人在线视频观看 | 欧美一级做a | 婷婷中文字幕一区二区三区 | 欧美精品一二三区 | 国产精品wwww | 亚洲精品一区中文字幕 | 欧美视频不卡 | 亚洲无马在线观看 | 久久成人综合视频 | 一级一级一级一级毛片 | 欧美性生活视频免费 | 午夜精品成人一区二区 | 国产精品啪 | 污黄视频在线播放 | 国产成人精品免费视频大全最热 | 7777视频 | 九九热视频免费 |