利用 301 重定向实现域名补全 www
关于域名、顶级域名、二级域名可能很多人存在这样一种误解,带 www 的才是的顶级域名,或者两者之间并没有差别。而事实上,带 www 的域名和不带 www 的绝不是同一个,不带 www 的域名才是顶级域名,带 www 的域名应该只是一个二级域名。举个例子,www.wilf.cn≠wilf.cn,而 www.wilf.cn 和 qqq.wilf.cn 是一个道理。
只是,用户对此可能没有概念,大家习惯访问的域名都是带 www 的,于是我们也都习惯使用带有 www 的域名。
那么不带 www 的域名怎么办呢?一般有三种情况:
1、和带有 www 的域名解析到一起。这样可能会造成两个网站的内容两个 url 的情况,一个带 www,另一个不带 www,重复的内容不同的域名,这样做对 SEO 是绝对不利的。
2、利用各种途径将不带 www 的域名跳转到带 www 的域名。跳转的方法有很多,这也是本文的意义所在。
3、不解析,不跳转,无法访问。我持有的几个域名和网站曾经一度都是这样。
以下重点说转向,转向可以通过很多方法实现
比如域名解析里自带的跳转,HTML 的 <meta http-equiv="refresh" content="5;url=http://www.example.com">,JavaScript 的 location.href = 'http://www.example.com',还有各种语言的跳转了,以及下面的 301 重定向。
301 重定向,也称为 301 转向。它的功能就是告诉搜索引擎,你的网址永久的变换了,从而将原网址的权重全部定向到新的网址上面。以下是不同环境下网站进行 301 重定向的代码
1、ASP 下的 301 转向代码
<%@ Language=VBScript %><%Response.Status = "301 Moved Permanently"Response.AddHeader "Location", "http://www.example.com/"%>2、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.example.com/");}</script>3、PHP 下的 301 转向代码
header("HTTP/1.1 301 Moved Permanently");header("Location: http://www.example.com/");exit();4、CGI Perl 下的 301 转向代码
$q = new CGI;print $q->redirect("http://example.com/");5、JSP 下的 301 转向代码
<%response.setStatus(301);response.setHeader("Location", "http://example.com/");response.setHeader("Connection", "close");%>6、Apache 下 301 转向代码
新建 .htaccess 文件,输入下列内容(需要开启 mod_rewrite):
1)将不带 WWW 的域名转向到带 WWW 的域名下:
Options +FollowSymLinksRewriteEngine onRewriteCond %{HTTP_HOST} ^example.com [NC]RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]2)重定向到新域名:
Options +FollowSymLinksRewriteEngine onRewriteRule ^(.*)$ http://example.com/$1 [L,R=301]3)使用正则进行 301 转向,实现伪静态:
Options +FollowSymLinksRewriteEngine onRewriteRule ^news-(.+).html$ news.php?id=$1将 news.php?id=123 这样的地址转向到 news-123.html。