2011-03-23 78 views
0

我已经在自定义HttpModule中设置了动态301重定向例程。该代码接受输入的URL,解析查询字符串,并使用配置和应用程序特定的逻辑,使用下面的代码重定向到一个新的搜索引擎友好的URL:ASP.NET 3.5,googlebot,301重定向“无法重定向HTTP头后发送”

if (HttpContext.Current.Response.IsRequestBeingRedirected) 
    return; 

if (!HttpContext.Current.Response.IsClientConnected) 
{ 
    response.End(); 
    return; 
} 

response.Redirect(newLocation, false); 
response.Status = "301 Moved Permanently"; 
response.StatusCode = 301; 

,如果你进入一个传统的URL这工作好得很直接在网页浏览器中。但是,当googlebot(66.249.71.11)访问同一网址时,我的事件日志显示了一堆“发送HTTP头后无法重定向”HttpExceptions。

我不知道该怎么解决问题。

回答

2

在ASP.NET 3.5中,Response.Redirect自动发送302(而不是301)并终止与客户端的连接。如果你想使用301,那么你必须手动插入所有的头文件。像下面这样:

Response.Clear(); 
Response.Status = "301 Moved Permanently"; 
Response.AddHeader("Location","/about.aspx"); 
Response.End(); 

或者您可以升级到ASP.NET 4.0现在在哪里有,表示事情的方法已被永久移动。

Response.RedirectPermanent("/about.aspx"); 
+0

马修 - 不幸的是你的代码导致基本上相同的错误。再次,我觉得奇怪的是,这只发生在网站被googlebot击中时。 – 2011-03-23 19:30:38

+0

您是否在流程的早期写入任何响应流?你得到哪个错误?根本不应该在我的方法中使用Response.Redirect。 – 2011-03-23 19:43:40