0

私はDiscountASP.NETで自分のサイトをホストしています。クライアントに404ステータスコードが送信されていないため、最近404エラー処理で問題が発生しましたが、なぜ突然起動したのかわかりません。以前は機能していました。簡単な例から始めて、エラー処理コードを回避しようとしました。私には2つのページがあり、どちらも存在します。

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エラーを認識します。それはホストのせいでしょうか?ありがとうございました。

4

2 に答える 2

0

はい、たぶん。

フィドラーがエラーコードを返している場合、アプリケーションは同じものを選択します。

于 2012-12-04T06:31:26.867 に答える
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 の切り替えは Web 上で実行されたため、問題はローカルでは発生しませんでした。この問題は明らかにDiscountASP.NETのせいではありませんが、customErrorsタグで書き換えルールを使用できない理由がわかりません。

于 2012-12-08T18:56:28.553 に答える