欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » ASP.Net » 正文

热门阅读

在Asp.Net中实现301页面重定向

创建时间:2011年09月21日 14:39  阅读次数:(6567)
分享到:
问题描述:
因为本站刚开始做的时候没有考虑到url对搜索引擎友好的问题,就随意用了aspx?id=1这样的动态参数格式。后来慢慢对seo的知识了解了一些,知道了包含动态参数的url地址对搜索引擎很不友好。没办法,使用了伪静态来隐藏了url后面的动态参数(使用方法参见:如何通过RewritePath方法重写Url地址实现伪静态),如当前页面的url地址。但这样就带来了一个问题,原来动态参数的地址已经被收录了,现在又实现了伪静态,那么新的url与原来的url肯定不一样了,对搜索引擎来说,是两个完全不同的地址,那么它又会重新收录一遍,这样就造成了搜索引擎认为你的网站中有大量的重复内容。

在网上搜索了大量的资料,终于在google的管理员工具帮助页面中找到了问题的解决方法,那就是把原来的地址使用301定向到新的地址,这样,搜索引擎就知道原地址和新地址是同一个地址了,就不会出现上述的问题了。

实现方法如下:
因为我的站是在IHttpModel类的BeginRequest中利用RewritePath实现了URL地址重写,所以我先在 BeginRequest事件中将需要重定向的地址做了标识:
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e)
{
if (path.Contains(".aspx") || path.Contains("?"))
{
context.Items.Add("IsRedirect", true);
context.Items.Add("Location", "/ac/ID" + context.Request.QueryString["ID"]);
context.RewritePath(path);
}
}
}

然后在最终需要重定向的页面中设置页面的Http状态码:
protected void Page_Load(object sender, EventArgs e)
{
if (Context.Items["IsRedirect"] != null && Context.Items["Location"] != null)
{
HttpContext.Current.Response.StatusCode = 301;
HttpContext.Current.Response.Status = "301 Moved Permanently";
HttpContext.Current.Response.AddHeader("Location", Context.Items["Location"].ToString());
}
}

运行效果:
我们利用Http返回状态工具查询一个被重定向的链接地址,返回结果如下:

查询地址:www.lmwlove.com/Article/ArticleDetail.aspx?ID=288 
返回状态码:301
网页返回HEAD信息如下
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /ac/ID288
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Wed, 21 Sep 2011 06:36:49 GMT
Content-Length: 34349

上述结果说明:我的设置生效了。
这样,就不会因为我们Url地址改变而使我们的网站的权重丢失了,也不会因为这种情误况让搜索引擎误认为我们网站有大量的重复内容了。o
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 55+14=? 的结果(结果是:69)
结  果: