什么是301转向?
301转向(或叫301重定向、301跳转)是用户或蜘蛛向网站服务器发出访问请求时,服务器返回的HTTP数据流中头信息(header)部分状态码的一种,表示本网址永久性转移到另一个地址。
其他常见的状态码还包括:
.200表示一切正常
.404网页不存在
.302临时性转向
.500内部程序错误
为什么要做网址转向?
除了解决网址规范化问题,还有很多需要做301转向的情形。
比如,为保护版权,公司拥有不同TLD的多个域名:
.jhmsk.com
.jhmsk.net
.jhmsk.com.cn
.jhmsk.cn
为了避免造成大量复制内容,应该选定一个为主域名,如jhmsk.com,其他域名做301转向到jhmsk.com。
或者公司注册了全称域名longcomjhmsk.com,但太长,也注册了缩写域名方便用户记住lcs.com,其中一个做主域名,另一个301转向到主域名。
网站改版也经常需要用到301转向,如页面删除、改变地址、URL命名系统改变等。
动态URL静态化也可能要做301,将旧的、动态的URL做301到新的、静态的URL。
301转向跳转共有两种方法:
1.服务器设置法,本设置方法因服务器软件版本较多,且设置繁琐,不推荐使用。
2.页面跳转方法,本方法在浏览器中执行,大多数浏览器均支持本301跳转页面,所以使用较为广泛。
IIS使用301:
选择需要301重定向的站点或者站点目录,右键属性-》目录,选择重定向URL并输入地址,勾选“资源的永久定向”。如下图:值得注意的是,域名服务商的解析系统内的网址转发用的不一定是使用的是301重定向,使用之前最好联系客服确定下转发类型。
搜索引擎:
使用301重定向将您原来网站上的所有网页永久重定向至新网站。这可以告诉搜索引擎和用户您的网站已永久迁移。是符合搜索引擎友好的,目前最安全的网址域名更换方法。
301重定向的两种实现方法
修改.htaccess文件
代码如下:
1<ifmodulemod_rewrite.c="">
2RewriteEngineOn
3RewriteCond%{HTTP_HOST}nowamagic.com$[NC]
4RewriteRule^(.*)$http://nowamagic.net/$1[R=301,L]
5RewriteCond%{HTTP_HOST}nowamagic.info$[NC]
6RewriteRule^(.*)$http://nowamagic.net/$1[R=301,L]
7</ifmodule>
关键代码就是2句话:
1RewriteCond%{HTTP_HOST}nowamagic.com$[NC]
2RewriteRule^(.*)$http://nowamagic.net/$1[R=301,L]
上面的域名是需要被重定向的旧域名,下面的是现在网站的域名。
使用PHP的重定向代码
新建一个index.php文件,然后参考下面代码按自己的重定向要求做简单修改:
01<?php
02$the_host=$_SERVER['HTTP_HOST'];
03$request_uri=isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'';
04switch($the_host)
05{
06case"www.nowamagic.tk":
07case"nowamagic.tk":
08$location="Location:http://nowamagic.net".$request_uri;
09break;
10case"blog.nowamagic.tk":
11$location="Location:http://blog.nowamagic.net".$request_uri;
12break;
13case"www.moiya.tk":
14case"moiya.tk":
15$location="Location:http://nowamagic.net";
16break;
17default:
18$location="Location:http://nowamagic.net";
19break;
20}
21header('HTTP/1.1301MovedPermanently');
22header($location);
23exit();
24?>
如果只要对一个域名进行重定向,可以把代码简化成下面的形式:
01<?php
02$the_host=$_SERVER['HTTP_HOST'];//取得进入所输入的域名
03$request_uri=isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'';//判断后面的请求部分
04if($the_host!=='nowamagic.net')//nowamagic.net是我现在的域名
05{
06header('HTTP/1.1301MovedPermanently');//发出301头部
07header('Location:http://nowamagic.net'.$request_uri);//跳转到我的新域名地址
08exit();
09}
10?>
注意,最后的exit()函数是一定要写的,我最初就没有写,结果只能重定向首页,像http://www.nowamagic.net/guestbook这样的网页,就无法进行重定向。
最后,关于重定向的一些细节:如果要对三个域名进行重定向,重定向前,首先将这三个域名作为AddonDomain绑定到我的服务器上去,并让这三个域名指向同一个文件夹,这样,只要修改这一个文件夹中的.htaccess文件或者index.php文件就可以了。如果没有.htaccess文件或者index.php文件,新建一个即可。