域名重定向

1.什么是重定向?

简单讲,就是从网址A调转到网址B。

官方定义:重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

2.为什么需要重定向?什么时候需要重定向?

1).网站调整(如改变网页目录结构),例如想直接使用域名访问网站;
2).网页被移到一个新地址;
3).网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
 
3.常用的重定向方式有:301 redirect、302 redirect与meta fresh。

官方的比较简洁的说明:

301 redirect: 301 代表永久性转移(Permanently Moved) 

302 redirect: 302 代表暂时性转移(Temporarily Moved )

meta fresh:通过网页中的meta指令,在特定时间后重定向到新的网页,现在很少用了。

4.301 redirect 和302 redirect的区别

详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。他们的不同在于。301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址

5.什么时候选择301重定向还是302重定向呢?
使用301重定向的场景:
1)域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
2)在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。即可以将不带www顶级域名重定向到带www的二级域名
3)空间服务器不稳定,换空间的时候。
使用302重定向的场景:
301代表永久性转移,301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
简单理解,

从网站A(搜索排名靠后)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,利用网站B让网站A的排名靠前了。
301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰搜索结果的网站排名”。
 
6.PHP重定向方法
301重定向方法:
1)所有网页都 301 重定向到指定网址
<?php
  header("HTTP/1.1 301 Moved Permanently");
  Header("Location: //www.domain.com");
?>

2)项级域名 301 重定向到带 www 的二级域名(例如:旧域名301重定向到新域名)

<?php
  $host = $_SERVER['HTTP_HOST'];
  $request = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
  if($host == 'domain.com'){
      header('HTTP/1.1 301 Moved Permanently');
      header('Location: //www.domain.com'.$request);
  }
?>

302重定向方法:

1)所有网页 302 重定向指定网址

<?php
  header("Location: //www.domain.com");
?>

2)指定网址,302到另一个网站的首页(例如:旧域名302重定向到新域名)

<?php
  $host = $_SERVER['HTTP_HOST'];
  if($host == 'domain.com'){
      header('HTTP/1.1 302 Moved Temporarily');
      header('Location: //www.domain.com');
  }
?>

 ps:请将上面的domain.com和www.domain.com修改成你想要跳转到的域名。

Tags: