php进行http重定向

什么是HTTP重定向?

当你访问www.yegle.net时,地址栏的地址会自动变成yegle.net。当你访问ye.gl的时候,地址栏的地址会变成yegle.net。这就是HTTP重定向

一个HTTP请求,返回的HTTP Response Header里,第一行是HTTP的状态码。正常情况下,HTTP请求返回的状态码是200 OK。
正常的HTTP请求,返回200 OK:



其他的比较知名的还有例如:


404 Not Found
301 Moved Permanently
302 Found
500 Internal Server Error

HTTP重定向就是通过301和302两种状态码来实现的。

302是临时重定向的意思。表示被访问页面因为各种需要被临时跳转到其他页面。具体的例子是访问 http://yegle.net/recursion.php



浏览器在收到302 Found的状态码之后会在返回的HTTP Response Header中查找Location字段,然后访问对应地址。在这个例子中,浏览器就会访问 http://yegle.net/recursion.php (嗯这是一个递归,你懂的…)

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



同样,浏览器在发现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的时候马上进行,也就是说页面的剩余内容会被下载来之后浏览器才会跳转。新手常犯的一个错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值