2012-12-04 4 views
0

나는 DiscountASP.NET에서 내 사이트를 호스팅하고 있습니다. 클라이언트가 404 상태 코드를 보내지 않았기 때문에 최근 404 오류 처리에 문제가 있었으며 파란색으로 시작한 이유를 알 수 없습니다. 그것은 일하는 것이 었습니다. 간단한 예제로 시작하여 오류 처리 코드를 해결하려고 노력했습니다. 두 페이지가 있습니다. 둘 다 존재합니다.ASP.NET 404 처리 코드가 로컬에서는 작동하지만 서버에서는 작동하지 않습니다.

404_start.aspx :이 페이지는 존재하지 않는 페이지를 에뮬레이션합니다.

<%@ Page Language="C#" Debug="True" Strict="True" %> 
<script runat="server"> 
public void Page_Load() 
{ 
    Response.TrySkipIisCustomErrors = true; 
    Response.StatusCode = 404; 
    Response.Status = "404 Not Found"; 
    Server.ClearError(); 
    Server.Transfer("404_end.aspx"); 
} 
</script> 
<html> 
<body> 
Start 
<br />Response.StatusCode: <%=Response.StatusCode%> 
<br />Response.Status: <%=Response.Status%> 
</body> 
</html> 

404_end.aspx

:이 페이지는 사용자에게 표시되는 오류 메시지를 에뮬레이션하기위한 것입니다.

<%@ Page Language="C#" Debug="True" Strict="True" %> 
<html> 
<body> 
End 
<br />Response.StatusCode: <%=Response.StatusCode%> 
<br />Response.Status: <%=Response.Status%> 
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158 
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158 
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158 
<br />This is extra text to fix this bug in Internet Explorer: http://queenofsubtle.com/404/?page_id=2158 
</body> 
</html> 

그래서 시작 페이지는 최종 페이지로 리디렉션되지만 404 오류는 절대로 나오지 않습니다. 피 들러 (Fiddler)는 302에이어서 200을 사용한다고 말합니다.하지만 404_end.aspx 페이지는 실제로 "Response.StatusCode : 404"를 읽습니다. 로컬에서 Fiddler는 원하는대로 404 오류를 확인합니다. 호스트의 잘못이 될 수 있습니까? 고맙습니다.

답변

0

나는 생각했습니다. 여기 내 web.config 파일의 압축 된 버전입니다 :

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <customErrors mode="On" defaultRedirect="~/error/default.aspx" redirectMode="ResponseRewrite"> 
     <error statusCode="404" redirect="~/error/404.aspx" /> 
    </customErrors> 
    </system.web> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Redirect to HTTPS" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions> 
      <add input="{HTTPS}" pattern="^OFF$" /> 
      <add input="{HTTP_HOST}" pattern="192\.168\." negate="true" /> 
      </conditions> 
      <action type="Redirect" url="https://{HTTP_HOST}{PATH_INFO}" redirectType="SeeOther" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 

그것은 재 작성 규칙을 보인다과 customErrors에이 상호 작용했다. 위에 표시된 재 작성 규칙 (사용자가 http를 요청할 때 https를 강제 실행하기위한 것임)을 제거하면 서버가 404 오류를 다시 반환하기 시작했습니다. 그래서 web.config 파일 대신 C#에서 http-> https 스위치를 구현했습니다. 모든 것이 잘 작동하는 것 같습니다. http-> https 스위치가 웹에서 수행 되었기 때문에 문제는 로컬에서 나타나지 않았습니다. 문제는 분명히 DiscountASP.NET의 잘못이 아니었지만, 왜 내가 customErrors 태그로 다시 쓰기 규칙을 사용할 수 없어야하는지 이해가되지 않습니다.

0

예.

피들러가 오류 코드를 반환하면 응용 프로그램에서 오류 코드를 선택합니다.

관련 문제