07555的空间

软件开发、交流、学习!

« 80 口子 被封了 用反向WEB 代理解决GoDaddy官方网站统计功能介绍 »

一个域名转向到新的域名,浅谈301永久重定向


以下文章高手就请忽略,这是一篇关于3XX状态的扫盲文章。
在HTTP协议中,使用三个数字代表HTTP协议状态。

HTTP状态代码是在Web服务器返回数据的第一行实现的

比如你访问http://www.baidu.com/,百度的服务器会返回的数据第一行是:
HTTP/1.1 200 OK
这里就说明百度返回的状态是200,协议是HTTP/1.1,状态描述是OK。

大家都知道g.cn这个google的网址,这个网址会转跳到http://www.google.cn上,当我们访问g.cn的时候第一行返回的是:
HTTP/1.1 301 Moved Permanently
说明状态是301,状态描述是Moved Permanently,直译为“永久转移”,这里g.cn用到的就是永久重定向。

大家会问,怎么看到这个“HTTP/1.1 200 OK”这样的状态,这里需要一个能够监控IE浏览器通讯的程序,我用的是HttpWatch 4.0 Professional 专业版,下载地址“http://link.silmoon.net/r/down_s4_11/HttpWatch.rar”,安装后从[查看(V)]->[浏览器栏(E)]找到HttpWatch,之后会看到这个工具已经显示出来了,在此不多说这个程序怎么使用了。



简单介绍几个状态代码(更多信息可参考)

在1XX中,是Informational和实验性使用的协议,几乎根本不用,就此忽略。

200 OK:表示请求已经接受,客户所需要的信息已经成功的返回给客户。
206 Partial Content:部分内容,如果客户端请求的是较大的资源,比如下载,MP3,会被分段传送。此状态表示这是其中的一部分。

300 Multiple Choices:可选重定向,表示客户请求的资源已经被转向到另外的地址了,但是没有说明是否是永久重定向还是临时重定向。
301 Moved Permanently:永久重定向,同上,但是这个状态会告知客户请求的资源已经永久性的存在在新的重定向的URL上。
302 Moved Temporatily:临时重定向,在HTTP1.1中状态描述是Found,这个和300一样,但是说明请求的资源临时被转移到新的URL上,在以后可能会再次变动或者此URL会正常请求客户的连接。

400 Bad Request:坏的请求,这在IIS里常见,其表现为(Invalid Hostname)失败的主机头,另外其他的失败的坏请求都是此状态。
403 Forbidden:禁止状态,此状态是明显的禁止用户和拒绝用户的请求!
404 Not Found:请求的地址和资源没有找到。

500 Internal Server Error:内部服务器错误。
503 Service Unavailable:服务器不可用,表示Web服务器已经崩溃或者超载运行,此状态就是明确的告诉用户,现在服务器有问题。

什么是精确重定向?

当你访问http://www.111.cn/myPage.aspx想转向到http://www.111.com/myPage.aspx这叫精确重定向,就是仅仅域名变了,但是后面的路径依旧存在,相反,就是不管访问那个页面,都重定向到一个新的指定的页面。

解释3xx状态

我们以301永久重定向为例。我们发请求给g.cn,看到HttpWatch的信息

以下是代码片段:
HTTP/1.1 301 Moved Permanently
Cache-Control: private, max-age=2592000
Content-Length: 235
Content-Type: text/html; charset=UTF-8
Date: Mon, 11 Jan 2010 13:58:44 GMT
Expires: Mon, 11 Jan 2010 13:58:44 GMT
Location: http://www.google.cn/webhp?source=g_cn
Server: gws
X-XSS-Protection: 0

此状态明显说明301永久重定向,但是从定向到哪里呢??看下面有一个Location: http://www.google.cn/webhp?source=g_cn,Location的意思是位置,一个3xx的请求必须包含Location字段信息,否则将不知道转向到哪里。

在程序中实现3xx状态

ASP:
在ASP的编程中有一个方法或者说是函数可以控制状态行的字符,并且可以添加Location这样的字段。

以下是代码片段:
<%
Response.Status = 301 ‘表示状态切换成301
Response.AddHeader “Location”,”http://www.baidu.com/” ‘在头中添加Location字段,其内容是百度的网址。
%>

 

以下是代码片段(精确重定向):
<%
Response.Status = 301 ‘表示状态切换成301
Response.AddHeader “Location”,”http://www.baidu.com/”&Request.ServerVariables(“HTTP_X_REWRITE_URL”) ‘在头中添加Location字段,其内容是百度的网址。
%>

这是永久重定向的实现方法,有人说Response.Redirect也可以重定向,但是你最好用HttpWatch看看到底是不是301!
Request.ServerVariables(“HTTP_X_REWRITE_URL”)是ASP中获得请求路径的方法。

PHP:
和ASP一样,也是两步

以下是代码片段:
<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://www.baidu.com/”);
?> 

 

以下是代码片段(精确重定向):
<?php
header(“HTTP/1.1 301 Moved Permanently”);
header(“Location: http://www.baidu.com/”.$_SERVER"REQUEST_URI"]);
?> 

在PHP中header()这个方法直接可以对HTTP头部信息进行操作,如果不写“header(“HTTP/1.1 301 Moved Permanently”); ”这个的话也可以转向,不过和ASP的Response.Redirect一样,状态不会是301而是300。

ASP.net:
也是两步

以下是代码片段:
<%@ Page Language=”C#” %>
<%
    Response.Status = “HTTP/1.1 301 Moved Permanently”;
    Response.Headers.Add(“Location”, http://www.baidu.com/);
%>
 

以下是代码片段(精确重定向):
<%@ Page Language=”C#” %>
<%
    Response.Status = “HTTP/1.1 301 Moved Permanently”;
    Response.Headers.Add(“Location”, “http://www.baidu.com/”.Request.ServerVariables(“HTTP_X_REWRITE_URL”));
%>
 

策略

要实现重定向,就要保证用户访问的所有地址都执行了上面的代码,如果有条件可以将所有请求Rewrite到一个这样的文件,如果不行,就想办法都要执行这个代码,其中有很多办法,比如dedecms无论访问什么地址都执行了common.inc.php这个文件,大家就可以上面的代码放到这个文件中。

另外同一空间实现判断重定向,如果一个空间绑定了两个域名

http://www.111.cn
http://www.111.com

如果用户访问的是http://www.111.cn/index.asp?page=2这样的网站重定向到http://www.111.com/index.asp?page=2,在同一空间如何实现,这里是以ASP编程做的例子,如果想判断是cn的域名就进行转向,不是com的域名就不转向可以通过编程方法实现判断

以下是代码片段(精确重定向):
<%
comDomain = “www.111.com” ‘定义COM域名

If Request.ServerVariables(“SERVER_NAME”) <> comDomain Then ‘如果请求的域名不是com的域名
            Response.Status = 301 ‘表示状态切换成301
            Response.AddHeader “Location”,”http://” & comDomain & “/”&Request.ServerVariables(“HTTP_X_REWRITE_URL”) ‘在头中添加Location字段,使用当前的求情的路径加上COM的域名组合成新的地址。
End If
%>
 
 

  • 相关文章:
  • quote 1.sgrf4263
  • http://www.juanyangji.com
  • Haha
    曲折

    生命正很多

    很多曲折的线

    因为不知方向我们可能在徘徊

    可卷扬机

    无论怎样我们都要看看,看看远方的路在哪里

    安逸

    我们追求的

    携手自己最爱的人

    在我们一起的路上

    看我们曾经走过的

    我们会微笑

    我们开心建筑卷扬机

    其实我们一直很乐观

    迷茫

    我以为

    对,不用我以为

    其实我们都是这样想的

    我们都有,可能不一样的

    我们把这个叫,迷茫

    选择建筑卷扬机

    两边的栅栏

    把我夹的很紧

    在路的中间

    我左,右&hellip;&hellip;

    而目标就在前方

    我别无选择 卷扬机



    -卷扬机8Haha
  • 12/21/2011 8:33:15 PM 回复该留言
  • quote 2.sgrf4263
  • http://www.juanyangji.com
  • Haha
    前段时间看了一篇文章,叫做《it人为什么难以拿高薪》,颇有感触,于是写下这篇文章,希望与各位xdjm共勉~

    能够看到这个帖子的每个xdjm,我们大家都不是含着金钥匙出生的富二代,因此,我们的一切成就需要自己的努力,这里面有痛苦,有彷徨,有挫折,我们是否能够咬牙坚持下去?

    首先,在中国这么一个人口众多的国家,尤其是在北京、上海这种一线城市,如何脱颖而出很重要,本科学历,四级证书已经成了最基本的标志(这里没有任何歧视意义,但是如果没有学历,很多公司会连面试的机会都不给),不用给我讲个例说有些人高中没毕业也能很成功,是,我身边就有一个实例,我曾经面试过一个90后的小男孩,高中都没毕业就不......76Haha
  • 1/16/2012 5:44:24 PM 回复该留言
  • quote 3.sgrf4263
  • http://www.juanyangji.com
  • Haha
    我是决不轻言放弃的男人三井寿. &mdash;&mdash;《灌篮高手》



    如果你执意追逐我的幻影,迟早会被真正的我给打败的!&mdash;&mdash;《棋魂》



    人在真正感激别人的时候,头就会自动低下来&mdash;&mdash;《12国纪》







    所谓生活就是一半是幸福,一半是痛苦,一个人之



    所以幸福,并不是他得天独厚,只是那个人心想着幸福,为忘记痛苦而努力,为变得幸福而努力。卷扬机只有这样才能使人真正幸福,反之,再多的幸福也被当成了痛苦。 &mdash;&mdash;《12国记》





    对方不亲切我, 我就不能对人亲切了吗? 不是......50Haha
  • 1/17/2012 8:22:59 PM 回复该留言
  • quote 4.sgrf4263
  • http://www.juanyangji.com
  • Haha
    翻翻台历..

    明天就是大年三十了...

    突然觉得其实挺冷清的...

    ...福州的年味..从我懂事以来.觉得其实就不是很浓厚..

    一到过年.冷清的街道..挺多就是层层迭起的鞭炮声让人感觉貌似挺热闹..

    今年好多人说..没了以往过年的冲劲...

    ..我们几乎没有很兴奋的买衣服..只是觉卷扬机得买衣服很麻烦很累..

    ..去超市采购..总觉得.好多东西其实天天都在吃啦..

    过年..不过是感觉糖成了很受欢迎的东西...可是平时其实它也不错..

    所以朋友说.其实.卷扬机过年就是用来团圆的日子..

    和家人一起.就是很好的了..

    是啊..年年过年..其实就是为了......35Haha
  • 1/17/2012 8:23:05 PM 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Arwen Build 81206

Copyright 2009-2010 Your WebSite. Some Rights Reserved.