接上代碼
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,maximum-scale=1,user-scalable=no"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<meta name="renderer" content="webkit"/>
<meta http-equiv="refresh" content="0;url=static/ck600mgr/pages/index.html">
<title></title>
</head>
<body>
</body>
</html>
301是永久重定向,常用的場(chǎng)景是使用域名跳轉(zhuǎn)。
比如,我們?cè)L問 http://www.zhihu.com 會(huì)跳轉(zhuǎn)到 https://www.zhihu.com,發(fā)送請(qǐng)求之后,就會(huì)返回301狀態(tài)碼,然后返回一個(gè)location,提示新的地址,瀏覽器就會(huì)拿著這個(gè)新的地址去訪問。
301.png
302是臨時(shí)重定向,用來(lái)做臨時(shí)跳轉(zhuǎn)。接著上面的例子,重定向到 https://www.zhihu.com 的請(qǐng)求又會(huì)通過(guò)302重定向到 https://www.zhihu.com/signup?next=%2F
302.png
不過(guò),看上去301和302都是代表重定向的意思。那具體有啥區(qū)別呢?
http 1.0規(guī)范中有2個(gè)重定向——301和302,在http 1.1規(guī)范中存在4個(gè)重定向——301、302、303和307。
其中301在http 1.0以及http 1.1中都表示永久重定向,就不討論了。
那302呢?
在http1.0中,302的規(guī)范是這樣的:
原請(qǐng)求是post,則不能自動(dòng)進(jìn)行重定向;原請(qǐng)求是get,可以自動(dòng)重定向。
但是瀏覽器和服務(wù)器的實(shí)現(xiàn)并沒有嚴(yán)格遵守HTTP中302的規(guī)范,服務(wù)器不加遵守的返回302,瀏覽器即便原請(qǐng)求是post也會(huì)自動(dòng)重定向,導(dǎo)致規(guī)范和實(shí)現(xiàn)出現(xiàn)了二義性。
所以HTTP 1.1中將302的規(guī)范細(xì)化成了303和307
繼承了HTTP 1.0中302的實(shí)現(xiàn)(即原請(qǐng)求是post,也允許自動(dòng)進(jìn)行重定向,結(jié)果是無(wú)論原請(qǐng)求是get還是post,都可以自動(dòng)進(jìn)行重定向)。
307則繼承了HTTP 1.0中302的規(guī)范(即如果原請(qǐng)求是post,則不允許進(jìn)行自動(dòng)重定向,結(jié)果是post不重定向,get可以自動(dòng)重定向)。
作為SEOER我想大家一定會(huì)遇到這樣的情況,有時(shí)公司業(yè)務(wù)需要要更換域名,可是每每遇到此問題,我想很多人會(huì)和我之前一樣一臉的懵逼吧!心想如何更換域名了?更換域名如何把網(wǎng)站原來(lái)的權(quán)重導(dǎo)到新域名了?其實(shí)這些如果公司有程序員,那么這些問題將不是問題。因?yàn)槟阒恍枰嬖V他我需要做個(gè)重定向,不一會(huì)兒人家就幫你搞定了,自己也輕松許多。但是往往許多小型公司是沒有程序員的,那也就是說(shuō)需要自己我們來(lái)做,那么如何制作301重定向和302重定向呢?別急,請(qǐng)我慢慢道來(lái)。
在開始制作301和302重定向之前先說(shuō)說(shuō)什么是301重定向,什么又是302重定向。301重定用專業(yè)點(diǎn)的話說(shuō)就是指永久性頁(yè)面移走,一種非常重要的“自動(dòng)轉(zhuǎn)向”技術(shù);302重定向指的是“暫時(shí)性頁(yè)面轉(zhuǎn)移”技術(shù)。說(shuō)簡(jiǎn)單點(diǎn)可以把他們理解為永久重定向和臨時(shí)性重定向。
理解了301重定向和302重定向,我們?cè)谡f(shuō)說(shuō)什么情況需要制作301重定向,什么情況下要用302重定向。經(jīng)常用到301重定向的情況如下:
1.網(wǎng)站網(wǎng)址URL的標(biāo)準(zhǔn)化
2.啟用了新域名
3.網(wǎng)站內(nèi)部結(jié)構(gòu)調(diào)整
4.刪除某些超鏈接的時(shí)候,如導(dǎo)航
經(jīng)常用到302重定向的情況如下:
1.網(wǎng)站臨時(shí)性維護(hù)
2.網(wǎng)站舉行活動(dòng)的時(shí)候需要指向到活動(dòng)頁(yè)面
301重定向制作方法:首先在網(wǎng)站根目錄新建一個(gè)文件“.htaccess”文件
1.利用mod_rewrite技術(shù),代碼如下(將此代碼寫入.htaceess)
RewriteEngine on
RewriteRule^(.*)$ http://www.seochat.org/ [R=301,L]
2.Apache服務(wù)器服務(wù)器下設(shè)置代碼
(1)方法1
<VirtualHost *>
ServerName [URL]www.10flash.net[/URL]
RewriteEngine on
RewriteRule^/(.*)$ [URL]http://www.seochat.org/ [URL] [R=301,L]
</VirtualHost>
(2)方法2
<VirtualHost 219.133.X.X>
Redirect / http://www.seochat.org/
ServerName www.10flash.net
</VirtualHost>
3.IIS服務(wù)器下設(shè)置方法
因?yàn)镮IS服務(wù)器有專門管理的應(yīng)用,所以不用寫代碼,直接打開Internet信息服務(wù)管理器,然后在需要重新定向的網(wǎng)頁(yè)或者目錄上點(diǎn)擊右鍵,選擇“重定向到URL”,在“重定向到”輸入框中輸入你要跳轉(zhuǎn)到的目標(biāo)網(wǎng)頁(yè)URL地址,再選中“資源的永久重定向”選項(xiàng),最后點(diǎn)擊應(yīng)用即可,切記最后要點(diǎn)擊”應(yīng)用“。
4.高級(jí)語(yǔ)言實(shí)現(xiàn)方法(ASP/PHP/ASP.NET)
ASP:
Response.Status=”301 Moved permanently”
Response. AddHeader “Location”,”http://www.seochat.org/”
Response.End
PHP:
header(“HTTP/1.1 301 Moved permanently”);
header(“Location: http://www.seochat.org/”);
Exit();
302重定向設(shè)置方法
(1)meta重定向(注意時(shí)間一定要設(shè)置3秒以上)
在網(wǎng)頁(yè)頭部模板中設(shè)置meta標(biāo)簽的http-equiv屬性值以及內(nèi)容來(lái)實(shí)現(xiàn)重定向。如在頁(yè)頭部分加上代碼<Metahttp-equiv=”refresh” content=”3;url=http://www.seochat.org”>,這樣做當(dāng)打開此頁(yè)面3秒后將自動(dòng)跳轉(zhuǎn)到網(wǎng)站www.seochat.org。
(2)JavaScript重定向設(shè)置方法(將此代碼寫在需要重定向的頁(yè)面上)
<script language=”javascript”>
<!-
Window.location.href=http://www.seochat.org;
//-->
</script>
這段代碼表示的是把你所要重定向的頁(yè)面重定向到http://www.seochat.com這個(gè)頁(yè)面上
寫在最后:今天就分享到這里,如有問題,請(qǐng)下面留言,我都會(huì)幫大家統(tǒng)統(tǒng)解答的。對(duì)了還有這些做完后不要忘了使用站長(zhǎng)工具的狀態(tài)碼檢查功能檢查,如何檢查,非常簡(jiǎn)單,把你重定向之前的頁(yè)面url復(fù)制出來(lái)后放到工具查詢框,看返回狀態(tài)碼是不是301或者302。再啰嗦一句以后小編分享時(shí)間規(guī)定為3天一篇,最后謝謝親們的支持。
天下班的時(shí)候看到了一些重定向的基礎(chǔ)知識(shí),也算開了眼界。以前也經(jīng)常使用301和302,但從來(lái)沒有使用過(guò)和了解過(guò)其他的3XX的狀態(tài)碼,發(fā)現(xiàn)原來(lái)里面涉及的知識(shí)和解決的問題的還不少。
重定向的流程
瀏覽器首先訪問服務(wù)器A的URL,服務(wù)器A返回帶著location為B的URL的 header 和3XX的狀態(tài)碼,瀏覽器讀取響應(yīng)的3XX狀態(tài)碼,獲取到頭部的 location,然后跳轉(zhuǎn)到服務(wù)器B的URL。
需要知道的,跳轉(zhuǎn)是瀏覽器發(fā)起的。如果服務(wù)器給一個(gè)非瀏覽器的終端返回了3XX的狀態(tài)碼,那有可能是無(wú)法完成重定向的。
某年,有個(gè)應(yīng)該用已經(jīng)運(yùn)行很很長(zhǎng)時(shí)間了,PHP寫的API接口。一直使用的是HTTP,經(jīng)常被劫持,然后領(lǐng)導(dǎo)想替換成加密的HTTPS,但是客戶端不能發(fā)版。后來(lái)服務(wù)器端就考慮把全站的接口從HTTP 302到HTTPS,討論這個(gè)方案的可行性。如果知道上面的流程和知識(shí)這個(gè)方案立馬就PASS了。
永久重定向
表示資源永久性的跳轉(zhuǎn)到新的URL。
一個(gè)比較常見的案例就是老站遷移到新站,老站直接關(guān)閉后,老站的頁(yè)面已經(jīng)被搜索引擎收錄了,這個(gè)時(shí)候使用永久重定向方案。
永久重定向兩個(gè)狀態(tài)碼
301,重定向請(qǐng)求通常會(huì)使用GET方法,不管原請(qǐng)求使用的是何種方法。
308,為了補(bǔ)充301.重定向必須使用原請(qǐng)求的方法和包體訪問。
臨時(shí)重定向
表示資源只是臨時(shí)跳轉(zhuǎn)到新的URL
臨時(shí)重定向一共有五個(gè)狀態(tài)碼,常用也就相對(duì)應(yīng)的兩個(gè)302和307.
302,重定向請(qǐng)求通常會(huì)使用GET方法,不管原請(qǐng)求使用的是何種方法。
303,并不表示資源變更,只是表示用新的URL的響應(yīng)代替原請(qǐng)求。不管原請(qǐng)求使用的是何種方法。基本跟302一致,所以市面很少用303,都是使用302.
307,為了補(bǔ)充302.重定向必須使用原請(qǐng)求的方法和包體訪問。
百度就是使用的307跳轉(zhuǎn),瀏覽器輸入http://www.baidu.com 會(huì)307 到https://www.baidu.com
300,該請(qǐng)求有多種可能的響應(yīng),瀏覽器可以選擇它們其中的一個(gè)。服務(wù)器沒有任何標(biāo)準(zhǔn)可以遵循去代替用戶來(lái)進(jìn)行選擇。
304,告訴瀏覽器,所請(qǐng)求的內(nèi)容距離上次訪問并沒有變化。 可以直接從瀏覽器緩存里獲取該資源。
后面兩種不常用。
使用比較多就是301 302 307 308
循環(huán)重定向的問題
ERRTOOMANY_REDIRECTS
這個(gè)報(bào)錯(cuò)挺常見的。如果訪問A頁(yè)面然后重定向訪問B,然后B又讓重定向訪問A,這樣就是循環(huán)重定向了。多次重定向也會(huì)報(bào)這個(gè)錯(cuò)。
生產(chǎn)環(huán)境遇到過(guò)一次,有一次日志上發(fā)現(xiàn)有ERRTOOMANY_REDIRECTS的報(bào)錯(cuò),但是在Nginx的配置上沒有找到 3XX的跳轉(zhuǎn)代碼啊,那怎么循環(huán)跳轉(zhuǎn)的。后來(lái)看到了這段配置
location / { try_files $uri $uri / / index . html$is_args$args ; }
后來(lái)發(fā)現(xiàn)根目錄下沒有index.html,uri不存在,然后uri/目錄也不存在,最后發(fā)起一個(gè)內(nèi)部子請(qǐng)求到index.html.index.html不存在,又到location,反復(fù)重定向。最后報(bào)錯(cuò) ERRTOOMANY_REDIRECTS。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。