2011-03-23 5 views
0

사용자 지정 HttpModule 내에 동적 301 리디렉션 루틴을 설정했습니다. 코드는 쿼리 문자열을 구문 분석하고, 설정 및 응용 프로그램 특정 논리를 사용하여 들어오는 URL을 받아 다음과 같은 코드를 사용하여 새 SEO 친화적 인 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; 

을 웹 브라우저에서 직접. 그러나 내 이벤트 로그에 googlebot (66.249.71.11)에서 동일한 URL에 액세스 할 때 "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

Matthew - 불행히도 코드 결과는 본질적으로 같은 오류입니다. 다시 말하지만, 특히 이상한 점은 googlebot이 사이트를 공격 할 때만 발생한다는 것입니다. –

+0

프로세스 초기에 응답 스트림에 아무 것도 쓰지 않습니까? 어떤 오류가 발생합니까? 내 메서드로 Response.Redirect를 사용하면 안됩니다. –