2011-03-23 68 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