2012年5月10日星期四

有关301重定向

上个星期,wordpress换了域名,涉及到了有关301重定向问题。在网上查了一下,在此做个记录,以备日后使用。

1.什么是301重定向 首先介绍一下301跳转,当你的网站改版或者基于某种原因想要改变某页面地址的时候,又不想将原有页面在搜索引擎中的权重完全放弃,使用的一种相对友好的 跳转方式。301跳转也叫做301永久重定向,当你改变了某一个页面地址的时候,搜索引擎的爬虫会按照原有存在搜索引擎服务器上的原地址访问,如果你什么 操作也没有做,那么改链接将会返回一个404的状态页面,代表你的网页没有被搜索引擎抓取到。如果你使用了301重定向那么爬虫根据你所设置的跳转地址找 到目标页面。理论上这样的跳转方式能够比较大的保留原页面的权重。 2.其它的跳转方法 当然除了301跳转还有其他的跳转方法如302暂时跳转、JS跳转、或程序端使用的各种跳转方法。这些方法都不能比较友好的对搜索引擎进行指引,甚至大量的使用302或其它跳转方式会被搜索引擎以作弊处理。 3.301重定向的优点及什么时候使用 当然就是我们刚才谈到的保留原页面权重的问题,就是说你想改变页面链接地址的时候使用。另外还有一种情况你最好使用301跳转,比如你为你的网站购买了大 量的域名,有时会出现这样的问题,所有的域名都能对网站资源进行访问,比如http://www.a.com/test/a.html和http: //www.b.com/test/a.html实际上访问的是同一个页面,而搜索引擎也同时抓取了这些域名和内容。这样的有很大的弊端,如权重被分散、 被判断为作弊等等,所以,你需要对非主域名进行301跳转设置。如果已经被搜索引擎抓取到大量的不同域名内容,那么你就得想办法将每个页面分别定位到主域 名下的这个页面。 4.301重定向设置方法


(说明http://www.domain.com为您的网站域名,以下仅做说明演示)

  • IIS下设置301


Internet信息服务管理器 -> 虚拟目录 -> 重定向到URL,输入需要转向的目标URL,并选择“资源的永久重定向”。




  • apache下设置301


.htaccess文件设置方法 1.例如你想把http://domain.com转向到http://www.domain.com将所有不带www的内容转到带www的域名下 RewriteEngine on RewriteCond %{HTTP_HOST} ^domain.com [NC] RewriteRule ^(.*)$ http://www.domain.com$1 [L,R=301] 或者把http://www.domain.com转向到http://domain.com不显示www前缀 RewriteEngine on RewriteCond %{HTTP_HOST} ^www.domain.com [NC] RewriteRule ^(.*)$ http://domain.com$1 [L,R=301] 这里的RewriteCond是一种筛选的规则,具体作用请查询RewriteCond使用方法 2.把老域名转到新域名下时,比如你的老域名是http://www.domain.com,将你老域名空间中的.htaccess设置如下

RewriteEngine on RewriteRule ^(.*)$ http://www.orzyouxi.com/$1 [L,R=301] http://www.orzyouxi.com为你的新域名 3.在同一域名下实现独立重定向规则,即由于改版造成的大规模页面地址变换 RewriteEngine on RewriteRule ^artacle.php?id=([0-9]+)$ $1.html [L,R=301] RewriteRule ^([0-9]+).html$ news.php?id=$1 解释一下含义,老系统中您使用的是http://www.domain.com/artacle.php?id=998 类似这样的地址 改版后变为http://www.domain.com/998.html 第一条规则是301重定向规则,完成跳转的意思。而第二条是对http://www.domain.com/998.html这个地址进行url伪静 态化,实际程序的指向是http://www.domain.com/news.php?id=998。

apache配置文件的301重定向写法 因为apache配置文件中可以使用ServerName那么规则写起来可以更简单一点,比如我们刚才提到的把http://domain.com转向到http://www.domain.com将所有不带www的内容转到带www的域名下 ServerName domain.com RewriteEngine on RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]

  • 程序中301重定向的写法


ASP的301转向代码 <%@ %> <% Response.Status=”301 Moved Permanently” Response.AddHeader “Location”, “http://www.domain.com/” %>


ASP.Net的301转向代码 <script runat=”server”> private void Page_Load(object sender, System.EventArgs e) { Response.Status = “301 Moved Permanently”; Response.AddHeader(”Location”,”http://www.domain.com/“); } </script>

PHP的301转向代码 header(”HTTP/1.1 301 Moved Permanently”); header(”Location: http://www.domain.com/”); exit();

CGI Perl的301转向代码 $q = new CGI; print $q->redirect(”http://www.domain.com”);

JSP的301转向代码 <% response.setStatus(301); response.setHeader( “Location”, “http://www.domain.com” ); response.setHeader( “Connection”, “close” ); %>

特别的:

如果要把所有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 ^(.*)$ http://www.domain.com/$1 [L,R=301]

具体可见:http://www.seozac.com/seo/301-redirect/

另外:

网站变更域名是件很麻烦的事,想通过301重定向,结果必须从一个网站空间定向到另一个网站空间,也就是说如果新域名和旧域名绑定在同一个网站空间上,是 无法进行301重定向的。迫不得已,只好在另一个空间上重新建立了与旧网站相同的网站。然后再修改旧网站的htaccess文件进行301重定向。
假设我们原来的域名为tobojie.com,新鲜出炉爱不释手的域名为taobojie.com,想让所有途径过来的tobojie.com都定向到taobojie.com,那么我们在根目录htaccess中加入如下:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^tobojie.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.tobojie.com [NC]
RewriteRule ^(.*)$ http://www.taobojie.com/$1 [L,R=301]
别看错了,其实是 www.tobojie.com 和 www.taobojie.com 的区别,多了个a
如果上面的设置没有作用于子文件形如/bbs,那么在/bbs下中的htaccess加入:(代码仅为演示,请下载htaccess文件)
RewriteEngine On
RewriteCond %{HTTP_HOST} ^tobojie.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.tobojie.com [NC]
RewriteRule ^(.*)$ http://www.taobojie.com/bbs/$1 [L,R=301]

没有评论:

发表评论