如何实现301转向(跳转,重定向)的作用?
优采云 发布时间: 2021-07-15 18:03如何实现301转向(跳转,重定向)的作用?
昨天提到,由于空间提供商的IP改变,顶级域名做A记录时出现DNS域名解析错误,导致没有www的顶级域名无法访问这时,url转发功能(url-forwarding或url redirect),转发到带www的域名进行访问。但是我们说使用这种url转发方式对seo不好。对搜索引擎最友好的方式就是使用301重定向(也叫301重定向、301重定向)。
所以这里有一些问题。为什么godaddy等域名注册商提供的URL转发功能不利于SEO? url转发的原理是什么?如果要使用301重定向,如何设置Linux apache、Windows IIS、php、ASP、ASP.NET、JSP实现301重定向?
301重定向(跳转、重定向)的作用
为什么要使用 301 转向?首先,第一个就是我们刚才提到的seo优化。在如何标准化 url 中也提到了这一点。设置301重定向后,原页面会返回301 HTTP状态码给浏览器或搜索引擎,通知搜索引擎下一个页面。如果已经永久重定向到新的网页,蜘蛛不会索引原来的网页,同时会将原来网页的PR权重传递给它重定向到的新网页。如果返回302状态码,就告诉蜘蛛页面跳转只是暂时的,蜘蛛还是会索引原页面,造成重复页面的问题(即谷歌补充材料)。如果跳转到302,会被视为两个重复的页面。
其次,当您因各种原因想更换域名时,可以使用301重定向将旧域名301重定向到新域名,这样旧域名的流量就不会丢失, PR权重也将被转移。另外,当注册多个不同的域名并指向同一个网站时,也可以只设置一个主域名,其他域名设置301为主域名,这样每个域名的权重不会被分散。因此,有必要使用301转向。
url转发原理
url转发有两种方式,隐藏转发和(url转发后浏览器地址栏输入的URL保持不变)非隐藏转发(也叫显式转发:url转发后地址栏中显示的地址为转发的 URL )。有人测试过,无论是否隐藏转发,不同的域名注册商可能返回不同的http headers。部分域名服务商管理后台设置的网址转发功能(URL Forwarding)会导致服务器向搜索引擎返回302状态码,而不是301 http状态码。
据说这种类型的url转发有的通过在浏览器窗口应用frame iframe实现隐藏转发,有的使用Javascript或Meta Refresh实现非隐藏url转发,301很少使用重定向方法。所以大家尽量少用网址转发功能,而是自己手动设置301重定向。
如何实现301重定向
之前我们已经提到了很多设置404页面的方法,比如WordPress。设置301重定向(301 redirection,redirection)的实现方法有很多种。下面根据不同的空间服务器类型和编程语言列出了各种301重定向实现代码。请查看童靴数量参考:
Linux 主机 Apache 服务器 Mod-Rewrite 模式:通过 .htaccess 文件
当浏览器或搜索引擎蜘蛛发送页面请求时,Web 服务器会检查一个名为“.htaccess”的文件,该文件通过修改“.htaccess”文件的设置来指定如何处理页面请求。告诉搜索引擎一个页面是302重定向(临时跳转)还是301重定向(永久跳转)。部分Linux主机服务器也支持在管理后台直接设置301重定向。如果不能在后台设置,实现301重定向的步骤也很简单:新建一个名为.htaccess.txt的文件(注意前面的点号不能省略),编写如下301重定向代码在txt文件中:
Options +FollowSymLinks
RewriteEngine on
rewritecond %{http_host} ^www.farleeh.info$ [nc]
rewriterule ^(.*)$ http://farlee.info/$1 [r=301,nc]
或
RewriteEngine On
RewriteCond %{HTTP_HOST} !^farlee.info$ [NC]
RewriteRule ^(.*)$ http://farlee.info/$1 [L,R=301]
2011-1-10 更新:今天遇到一个情况,WordPress 缓存插件 cos-html-cache 启用,生成静态 html 文件。这些 www 和非 www 域的 301 重定向将失败。原来的原因是在写rewritecond的时候,正则表达式rewritecond %{http_host} ^ [nc] 有一个美元符号$(红色字体如上),最后缺少一个空格。一些网上复制和复制的301重定向规则使用这个空格或符号$忘记了。
保存文件,删除文件名末尾的.txt,上传到网站root目录。上面代码的意思是,整个站点上所有寻址带www的域名的网页都会被301重定向到不带www的域名(不仅是主页,还有子目录/网页)。 [nc] 指忽略大小写。如果其他域名要重定向到这个新域名,在.htaccess文件中添加如下重定向代码:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ http://farlee.info/$1 [L,R=301]
Windows主机IIS下301重定向设置
在IIS管理后台->选择要重定向的文件或文件夹->右键“重定向到URL”->输入需要重定向的目标URL->选择“永久重定向资源”。
另外,如果你的Windows虚拟主机空间支持ISAPI_Rewrite,你可以在IIS下使用ISAPI_Rewrite不仅可以实现url重写,还可以设置301重定向。以下是三个版本的ISAPI_Rewrite 301重定向到不带www域名的代码对应的带www的域名:
# ISAPI_Rewrite 1.3 版本 域名的301重定向
RewriteCond Host: ^www\.farlee\.info$
RewriteRule (.*) http\://farlee\.info$1 [I,R]
# ISAPI_Rewrite 2.x 版本
RewriteCond Host: ^www\.farlee\.info$
RewriteRule (.*) http\://farlee\.info$1 [I,RP]
# ISAPI_Rewrite 3.x 版本
RewriteCond %{HTTP:Host} ^www\.farlee\.info$
RewriteRule (.*) http\://farlee\.info$1 [NC,R=301]
其他情况,如IIS下不同域名之间的301重定向代码,请看详细介绍:ISAPI Rewrite实现IIS 301重定向。
PHP 301 重定向代码
301重定向也可以通过在php文件中添加php头来实现,代码如下:
ASP 301 重定向代码
ASP.NET 301 重定向代码
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",http://farlee.info);
}
ColdFusion301 重定向代码
CGI Perl 下的 301 转码
$q = new CGI;
print $q->redirect("http://farlee.info");
JSP下的301转码
没想到这个文章写了这么久。有这么多301重定向方法供我们选择。我们需要依靠域名URL转发功能做什么?哈哈。