301跳转有多种方法,比如通过域名URL转发、服务器的rewrite设置。但部分服务器域名URL转发功能被禁止使用了,而且绝大部分网站都使用虚拟主机,在不支持rewrite的情况下,只能通过代码实现301跳转。
下面的代码主要针对新旧2个域名同时绑定一个空间,需要将旧域名跳转到新域名时适用,在每个页面头部加入以下代码:
if request.ServerVariables(”Server_Name”)<>”www.luoyeju.cn” then
Response.Status=”301 Moved Permanently”
if request.ServerVariables(”QUERY_STRING”)<>”" then
Response.AddHeader “Location”,”http://www.luoyeju.cn”
&request.ServerVariables(”PATH_INFO”) &”?”& request.ServerVariables(”
QUERY_STRING”)
else
Response.AddHeader “Location”,”http://www.luoyeju.cn”
&request.ServerVariables(”PATH_INFO”)
end if
response.end
end if
说明:
实际使用中,Response.AddHeader这行不要换行,否则会出现500错误。这里是因为页面显示的关系,自动换行了。
因为博客系统的关系,所有双引号自动变成了大写,直接copy使用将出错,请在copy以上代码后,将所有双引号改成英文双引号。www.luoyeju.cn替换成你跳转后的域名。
request.ServerVariables(”PATH_INFO”) 表示获取URL,request.ServerVariables(”QUERY_STRING”) 表示获取URL后面的动态参数。
至于为什么还要判断request.ServerVariables(”QUERY_STRING”)是不是为空?是因为否则的话不管是不是存在URL后面的动态参数,URL最后都会有一个问号,虽然不影响页面显示,但对于URL规范来说,不太严谨。经过以上代码判断,不但转换域名,还能直接跳转到相对应的页面,通过代码彻底实现301跳转。
其他301相关网络文摘:
当有多个域名指向你的站点时,301跳转是每个网站常用的一种页面跳转方式,针对SEO来说,作用有以下几点:
1,301跳转是搜索引擎认可的一种跳转方式,也就是说通过这种方式从一个网址跳转到另外一个网址并不会受到搜索引擎的惩罚。
2,上面说过这种跳转方式是搜索引擎认可的,搜索引擎的设计者以及考虑到一个域名并不一定会跟随一个网站一辈子,利用这种跳转方式可以让搜索引擎认为您“永久”放弃这个域名并启用了新的域名,那么搜索引擎会把你的老域名相应权重转移到新的域名上来。不过这里要说明一下,并不是通过301跳转就能使权重完全转移的,这个还有很多因素决定。301只能说可以让损失减少到最低。
301的具体设置方式
1、IIS下301设置
Internet信息服务管理器 -> 虚拟目录 -> 重定向到URL,输入需要转向的目标URL,并选择“资源的永久重定向”。
2、ASP下的301转向代码
<%@ Language=VBScript %>
<%
if request.ServerVariables("SERVER_NAME")="blog.luoyeju.cn" or
request.ServerVariables("SERVER_NAME")="luoyeju.cn" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.luoyeju.cn/"
Response.End
end if
%>
3、ASP.Net下的301转向代码
<script runat=”server”>
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = “301 Moved Permanently”;
Response.AddHeader(”Location”,”www.luoyeju.cn/301/“);
}
</script>
4、PHP下的301转向代码
if(($HTTP_SERVER_VARS["HTTP_HOST"]=="blog.luoyeju.cn")||($HTTP_SERVER_VARS
["HTTP_HOST"]=="seotest.com"))
{
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.luoyeju.cn/");
}
5、CGI Perl下的301转向代码
$q = new CGI;
print $q->redirect(”www.luoyeju.cn/301/”);
6、JSP下的301转向代码
<%
response.setStatus(301);
response.setHeader( “Location”, “www.luoyeju.cn/301/ );
response.setHeader( “Connection”, “close” );
%>
7、Apache下301转向代码
新建.htaccess文件,输入下列内容(需要开启mod_rewrite):
1)将不带WWW的域名转向到带WWW的域名下
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^luoyeju.cn [NC]
RewriteRule ^(.*)$www.luoyeju.cn/301/[L,R=301]
2)重定向到新域名
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$wwww.luoyeju.cn/301/ [L,R=301]
3)使用正则进行301转向,实现伪静态
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^news-(.+)\.html$ news.php?id=$1
将news.php?id=123这样的地址转向到news-123.html
8、Apache下vhosts.conf中配置301转向
为实现URL规范化,SEO通常将不带WWW的域名转向到带WWW域名,vhosts.conf中配置为:
<VirtualHost *:80>
ServerName www.luoyeju.cn/
DocumentRoot /home/luoyeju
</VirtualHost>
<VirtualHost *:80>
ServerName seotest.com
RedirectMatch permanent ^/(.*) www.luoyeju.cn/301/
</VirtualHost>
9.让zblog不带www的域名跳转到www的方法
打开博客根目录default.asp,
在<!--#include file="class/cls_logAction.asp" -->一行下面添加一下代码即可
<%
if request.ServerVariables("SERVER_NAME")="luoyeju.cn" then
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.luoyeju.cn/"
Response.End
end if
%>