301重定向技术

关于重定向

在我们的网站建设中,时常会遇到需要网页重定向的情况:如网页目录结构改变、页面URL修改,再或者网页扩展名改变(如因需要把.php改成.html或.shtml)。在这些情况下,如果不对原URL做重定向,则通过用户收藏夹或搜索引擎数据库中的旧地址只能让访客得到一个404错误信息的页面,给访客以非常差的用户体验同时,访问流量也会白白丧失。再如某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点,等等…

常用的重定向方式有:301重定向、302重定向、JavaScript重定向、PHP/ASP/CGI重定向、META Refresh等。

关于301重定向

301重定向(Permanently Moved),又叫301转向或301跳转,是当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种(其它常见的状态码还包括,200表一切正常,404网页找不到,302暂时转向,等等),表示本网页永久性转移到另一个地址。301重定向是网页更改地址后对搜索引擎友好的最好方法,这不难实现并且可以使特殊的页面在搜索引擎中保持优先等级(Rinking),只要不是暂时搬移的情况,都建议使用301来做转址。

其他常用的重定向

  • 302重定向:302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊,目前,各大主要搜索引擎均加强了打击力度。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。
  • META Refresh:这在2000年前比较流行,不过现在已很少见。其具体是通过网页中的meta指令,在特定时间后重定向到新的网页,如果延迟的时间太短(约5秒之內),会被判断为spam。

为什么要用301重定向?

301重定向可促进搜索引擎优化效果。从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法。当网页A用301重定向转到网页B时,搜索引擎可以肯定网页A永久的改变位置,或者说实际上不存在了,搜索引擎就会把网页B当作唯一有效目标。好处是,第一,没有网址规范化问题,第二,也很重要的,网页A的PR网页级别会传到网页B。

302重定向可能会有URL规范化问题。迄今为止,能够对302重定向具备优异处理能力的只有Google。也就是说,在网站使用302重定向命令将其它域名指向主域时,只有Google会把其它域名的链接成绩计入主域,而其它搜索引擎只会把链接成绩向多个域名分摊,从而削弱主站的链接总量。既然作为网站排名关键因素之一的外链数量受到了影响,网站排名降低也是很自然的事情了。其它方法都是常用的作弊手法,当然不是说不可以正当地用,方法本身没有错,但被作弊者用多了,搜索引擎对这些可疑的转向都很敏感。

综上所述,在众多重定向技术中,301永久性重定向是最为安全的一种途径,也是极为理想的一款解决方案。

常用的301重定向方法:

  1. IIS服务器实现301重定向
    打开internet信息服务管理器,在欲重定向的网页或目录上按右键(见下图),选中“重定向到URL”,在对话框中输入目标页面的地址,切记选中“资源的永久重定向”,点击“应用”即可。

    IIS服务器实现301重定向

  2. Apache服务器实现301重定向
    在Apache中,有个很重要的文件.htaccess,通过对它的设置,可以实现很多强大的功能,301重定向只是其中之一。

    比如把/old.htm转到http://www.domain.com/new.htm,可以用这个指令:

    1. redirect 301 /old.htm http://www.domain.com/new.htm

    1. 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:

    1. RewriteEngine on
    2. RewriteCond %{HTTP_HOST} ^domain.com$ [OR]
    3. RewriteCond %{HTTP_HOST} ^blog.domain.com$
    4. RewriteRule ^(.*)$ http://www.domain.com/ [R=301,L]

    1. Options +FollowSymLinks
    2. RewriteEngine on
    3. RewriteCond %{HTTP_HOST} ^domain.com [NC]
    4. RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301]

    通过合理地配置重定向参数中的正则表达式,可以实现更复杂的匹配。有兴趣的朋友可参考Apache手册。

  3. PHP下的301重定向
    1. <?php
    2. header("HTTP/1.1 301 Moved Permanently");
    3. header("Location: http://www.uiland.com");
    4. exit();
    5. ?>
  4. ASP下的301重定向
    1. <%@ Language=VBScript %>
    2. <%
    3. Response.Status="301 Moved Permanently"
    4. Response.AddHeader "Location","http://www.yoursite.com/"
    5. Response.End
    6. %>
  5. ASP .NET下的301重定向
    1. <script runat=”server”>
    2. private void Page_Load(object sender, System.EventArgs e)
    3. {
    4. Response.Status = “301 Moved Permanently”;
    5. Response.AddHeader(”Location”,”http://www.yoursite.com”);
    6. }
    7. </script>
  6. 绑定/本地DNS

    如果具有对本地DNS记录进行编辑修改的权限,则只要添加一个记录就可以解决此问题。若无此权限,则可要求网站托管服务商对DNS服务器进行相应设置。

    DNS服务器的设置

    若要将aaa.domain.com指向www.domain.com,则只需在DNS服务中应增加一个别名记录,可写成:aaa IN CNAME www.domain.com。

    如需配置大量的虚拟域名,则可写成:* IN CNAME www.domain.com。

    这样就可将所有未设置的以domain.com结尾的记录全部重定向到www.domain.com上。

  7. HTML无法做301转向。在HTML里只能做JS或META Refresh,但不是301转向。HTML一被读取,就已经返回200 OK状态码了。

301重定向检测工具

配置完成后,要认真检查一下是否正确,可以使用网页重定向检测工具Search Engine Friendly Redirect Checker检查。

参考:

发表评论