<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>杰克，快跑！ &#187; 301跳转</title>
	<atom:link href="http://blog.jackrun.com/archives/tag/301%e8%b7%b3%e8%bd%ac/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.jackrun.com</link>
	<description>busy to live or busy to die</description>
	<lastBuildDate>Fri, 18 Jun 2010 09:15:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>从HTTP状态 301，302，200 来看页面跳转</title>
		<link>http://blog.jackrun.com/archives/463.html</link>
		<comments>http://blog.jackrun.com/archives/463.html#comments</comments>
		<pubDate>Mon, 30 Mar 2009 08:03:46 +0000</pubDate>
		<dc:creator>Peltason</dc:creator>
				<category><![CDATA[软件开发]]></category>
		<category><![CDATA[301跳转]]></category>
		<category><![CDATA[302跳转]]></category>

		<guid isPermaLink="false">http://www.jackrun.com/?p=463</guid>
		<description><![CDATA[301和302 Http状态有啥区别？
301，302 都是HTTP状态的编码，都代表着某个URL发生了转移，不同之处在于：
301 redirect: 301 代表永久性转移(Permanently Moved)，
302 redirect: 302 代表暂时性转移(Temporarily Moved )，
当然　Http 状态 200 标示没有任何问题发生。
 
这两种转移在使用的时候有啥好处或者问题？
301 重定向是网页更改地址后对搜索引擎友好的最好方法，只要不是暂时搬移的情况,都建议使用301来做转址。
302 重定向是临时性转移。
在前些年，不少Black Hat SEO曾广泛应用这项技术作弊，目前，各大主要搜索引擎均加强了打击力度，象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam，也很容易被搜寻引擎容易误判为spam而遭到惩罚。

研究搜索引擎优化（SEO）的人，应该都知道，301，302　使用不当，或者灵活使用会有不错的效果的，比如参看下面文章：
302转向与网址劫持
301转向和网址规范化
301重定向的实现方法
51window提供的301转向的代码
一个网站十几个域名的重定向经验谈
几个常用的301重定向
 
 
如果是运维人员，配置WEB服务器的一些设置就可以实现跳转，比如下面一些关于IIS实现重定向的文章
将请求重定向到文件、目录或程序 (IIS 6.0)
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/fbcccfce-6695-4f92-bd55-869d85ff49fb.mspx?mfr=true
重定向参考 (IIS 6.0)
http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/41c238b2-1188-488f-bf2d-464383b1bb08.mspx?mfr=true
其他WEB服务器也可以通过设置实现跳转，我就不罗列了。
 
 
从技术人员来说我们比较常用的跳转方法有以下几种：
我们使用 Fiddler 工具来监控的下面提到的几种方法，看跳转过程中HTTP状态码是301？302？200？：
 
方法1：Response.Redirect(&#8220;Test.aspx&#8221;);
状态码 301 临时性跳转
 
方法2：&#60;meta http-equiv=&#8221;refresh&#8221; content=&#8221;5; URL=Test.aspx&#8221; /&#62;
meta fresh: 这在2000年前比较流行，不过现在已很少见。其具体是通过网页中的meta指令，在特定时间后重定向到新的网页，如果延迟的时间太短(约5秒之內)，会被判断为spam。这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。
 
方法3：Server.Transfer(&#8220;Test.aspx&#8221;);
这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。
 
方法4：URLRewrite
这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。
 
没有一种是301跳转。也就是上面几种跳转方式都用不到301跳转的好处。
 
使用301跳转有啥好处呢？
SEO（搜索引擎优化）中提到一点：如果我们把一个地址采用301跳转方式跳转的话，搜索引擎会把老地址的PageRank等信息带到新地址，同时在搜索引擎索引库中彻底废弃掉原先的老地址。

如何编码实现301跳转呢？
Response.Status = &#8220;301 Moved Permanently&#8221;;
Response.AddHeader(&#8220;Location&#8221;,&#8221;&#8230;&#8221;);
这里的 &#8230; 表示你要跳转去的页面。
302重定向和网址劫持（URL hijacking）有什么关系呢？
这要从搜索引擎如何处理302转向说起。从定义来说，从网址A做一个302重定向到网址B时，主机服务器的隐含意思是网址A随时有可能改主意，重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下，当收到302重定向时，一般只要去抓取目标网址就可以了，也就是说网址B。
实际上如果搜索引擎在遇到302转向时，百分之百的都抓取目标网址B的话，就不用担心网址URL劫持了。
问题就在于，有的时候搜索引擎，尤其是Google，并不能总是抓取目标网址。为什么呢？比如说，有的时候A网址很短，但是它做了一个302重定向到B网址，而B网址是一个很长的乱七八糟的URL网址，甚至还有可能包含一些问号之类的参数。很自然的，A网址更加用户友好，而B网址既难看，又不用户友好。这时Google很有可能会仍然显示网址A。
由于搜索引擎排名算法只是程序而不是人，在遇到302重定向的时候，并不能像人一样的去准确判定哪一个网址更适当，这就造成了网址URL劫持的可能性。也就是说，一个不道德的人在他自己的网址A做一个302重定向到你的网址B，出于某种原因， Google搜索结果所显示的仍然是网址A，但是所用的网页内容却是你的网址B上的内容，这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了。
怎样做301转向
如果你用的是Unix/Linux主机，可以用文件(Unix/Linux中用于目录特定指令如密码，转向，错误处理等的文件)。
比如把/old.htm转到http://www.domain.com/new.htm，可以用这个指令：
redirect 301 /old.htm http://www.domain.com/new.htm
或
redirect permanent /old.htm http://www.domain.com/new.htm
如果要把所有http://domain.com形式的URL用301重定向转到 http://www.domain.com，包括：
http://domain.com/about.htm
转到 http://www.domain.com/about.htm
及
http://domain.com/dir/index.htm
转到 http://www.domain.com/dir/index.htm
等等，还要用到mod_rewrite：
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.com [NC]
RewriteRule [...]]]></description>
			<content:encoded><![CDATA[<div id="blog_text" class="cnt"><strong>301和302 Http状态有啥区别？</strong></div>
<div class="cnt">301，302 都是HTTP状态的编码，都代表着某个URL发生了转移，不同之处在于：</div>
<p>301 redirect: 301 代表永久性转移(Permanently Moved)，</p>
<p>302 redirect: 302 代表暂时性转移(Temporarily Moved )，</p>
<p>当然　Http 状态 200 标示没有任何问题发生。</p>
<p> </p>
<p><strong>这两种转移在使用的时候有啥好处或者问题？</strong></p>
<p>301 重定向是网页更改地址后对搜索引擎友好的最好方法，只要不是暂时搬移的情况,都建议使用301来做转址。</p>
<p>302 重定向是临时性转移。</p>
<p>在前些年，不少Black Hat SEO曾广泛应用这项技术作弊，目前，各大主要搜索引擎均加强了打击力度，象Google前些年对Business.com以及近来对BMW德国网站的惩罚。即使网站客观上不是spam，也很容易被搜寻引擎容易误判为spam而遭到惩罚。</p>
<p><span id="more-463"></span></p>
<p>研究搜索引擎优化（SEO）的人，应该都知道，301，302　使用不当，或者灵活使用会有不错的效果的，比如参看下面文章：</p>
<p>302转向与网址劫持</p>
<p>301转向和网址规范化</p>
<p>301重定向的实现方法<br />
51window提供的301转向的代码<br />
一个网站十几个域名的重定向经验谈<br />
几个常用的301重定向</p>
<p> </p>
<p> </p>
<p><strong>如果是运维人员，配置WEB服务器的一些设置就可以实现跳转，比如下面一些关于IIS实现重定向的文章</strong></p>
<p>将请求重定向到文件、目录或程序 (IIS 6.0)</p>
<p><a href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/fbcccfce-6695-4f92-bd55-869d85ff49fb.mspx?mfr=true" target="blank">http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/fbcccfce-6695-4f92-bd55-869d85ff49fb.mspx?mfr=true</a></p>
<p>重定向参考 (IIS 6.0)</p>
<p><a href="http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/41c238b2-1188-488f-bf2d-464383b1bb08.mspx?mfr=true" target="blank">http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/iis/41c238b2-1188-488f-bf2d-464383b1bb08.mspx?mfr=true</a></p>
<p>其他WEB服务器也可以通过设置实现跳转，我就不罗列了。</p>
<p> </p>
<p> </p>
<p><strong>从技术人员来说我们比较常用的跳转方法有以下几种：</strong></p>
<p>我们使用 Fiddler 工具来监控的下面提到的几种方法，看跳转过程中HTTP状态码是301？302？200？：</p>
<p> </p>
<p>方法1：Response.Redirect(&#8220;Test.aspx&#8221;);</p>
<p>状态码 301 临时性跳转</p>
<p> </p>
<p>方法2：&lt;meta http-equiv=&#8221;refresh&#8221; content=&#8221;5; URL=Test.aspx&#8221; /&gt;</p>
<p>meta fresh: 这在2000年前比较流行，不过现在已很少见。其具体是通过网页中的meta指令，在特定时间后重定向到新的网页，如果延迟的时间太短(约5秒之內)，会被判断为spam。这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。</p>
<p> </p>
<p>方法3：Server.Transfer(&#8220;Test.aspx&#8221;);</p>
<p>这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。</p>
<p> </p>
<p>方法4：URLRewrite</p>
<p>这种跳转方式，整个跳转过程中，页面Http状态都是200，即，页面没有任何错误发生。</p>
<p> </p>
<p>没有一种是301跳转。也就是上面几种跳转方式都用不到301跳转的好处。</p>
<p> </p>
<p>使用301跳转有啥好处呢？</p>
<p>SEO（搜索引擎优化）中提到一点：如果我们把一个地址采用301跳转方式跳转的话，搜索引擎会把老地址的PageRank等信息带到新地址，同时在搜索引擎索引库中彻底废弃掉原先的老地址。<br />
<strong><br />
如何编码实现301跳转呢？</strong></p>
<p>Response.Status = &#8220;301 Moved Permanently&#8221;;<br />
Response.AddHeader(&#8220;Location&#8221;,&#8221;&#8230;&#8221;);</p>
<p>这里的 &#8230; 表示你要跳转去的页面。<br />
<strong>302重定向和网址劫持（URL hijacking）有什么关系呢？</strong></p>
<p>这要从搜索引擎如何处理302转向说起。从定义来说，从网址A做一个302重定向到网址B时，主机服务器的隐含意思是网址A随时有可能改主意，重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下，当收到302重定向时，一般只要去抓取目标网址就可以了，也就是说网址B。<br />
实际上如果搜索引擎在遇到302转向时，百分之百的都抓取目标网址B的话，就不用担心网址URL劫持了。<br />
问题就在于，有的时候搜索引擎，尤其是Google，并不能总是抓取目标网址。为什么呢？比如说，有的时候A网址很短，但是它做了一个302重定向到B网址，而B网址是一个很长的乱七八糟的URL网址，甚至还有可能包含一些问号之类的参数。很自然的，A网址更加用户友好，而B网址既难看，又不用户友好。这时Google很有可能会仍然显示网址A。<br />
由于搜索引擎排名算法只是程序而不是人，在遇到302重定向的时候，并不能像人一样的去准确判定哪一个网址更适当，这就造成了网址URL劫持的可能性。也就是说，一个不道德的人在他自己的网址A做一个302重定向到你的网址B，出于某种原因， Google搜索结果所显示的仍然是网址A，但是所用的网页内容却是你的网址B上的内容，这种情况就叫做网址URL劫持。你辛辛苦苦所写的内容就这样被别人偷走了。</p>
<p><strong>怎样做301转向</strong></p>
<p>如果你用的是Unix/Linux主机，可以用文件(Unix/Linux中用于目录特定指令如密码，转向，错误处理等的文件)。</p>
<p>比如把/old.htm转到http://www.domain.com/new.htm，可以用这个指令：</p>
<p>redirect 301 /old.htm http://www.domain.com/new.htm</p>
<p>或</p>
<p>redirect permanent /old.htm http://www.domain.com/new.htm</p>
<p>如果要把所有http://domain.com形式的URL用301重定向转到 http://www.domain.com，包括：</p>
<p>http://domain.com/about.htm</p>
<p>转到 http://www.domain.com/about.htm</p>
<p>及</p>
<p>http://domain.com/dir/index.htm</p>
<p>转到 http://www.domain.com/dir/index.htm</p>
<p>等等，还要用到mod_rewrite：</p>
<p>Options +FollowSymLinks<br />
RewriteEngine on<br />
RewriteCond %{HTTP_HOST} ^domain.com [NC]<br />
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]</p>
<p>如果你用的是 Windows主机，应该在控制面板做301转向设定。</p>
<p>HTML无法做301转向。在HTML里只能做JS或META REFRESH，但不是301转向。HTML一被读取，就已经返回200 OK状态码了。</p>
<p>如果你的页面是ASP或PHP还可以做301转向：</p>
<p> </p>
<div class="code_title">代码</div>
<p class="alt"><span><span>ASP：   </span></span><span>  </span></p>
<p class="alt"><span>&lt;%   </span></p>
<p><span>Response.Status=</span><span class="string">&#8220;301 Moved Permanently&#8221;</span><span> Response.AddHeader </span><span class="string">&#8220;Location&#8221;</span><span>, </span><span class="string">&#8221; http://www.domain.com&#8221;</span><span>  </span></p>
<p class="alt"><span>%&gt;   </span></p>
<p><span>  </span></p>
<p class="alt"><span>&lt;?PHP:   </span><span>  </span></p>
<p class="alt"><span>Header( “HTTP/</span><span class="number">1.1</span><span> </span><span class="number">301</span><span> Moved Permanently” );   </span></p>
<p><span>Header( “Location: http:</span><span class="comment">//www.domain.com” ); </span><span>  </span></p>
<p class="alt"><span>?&gt;  </span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jackrun.com/archives/463.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
