web-dev-qa-db-ja.com

.aspx以外のページでweb.configが404エラーページに転送しない

目的

不足しているページのすべてのURLを404error.aspxとしてルートにある404ページに転送したい

問題

これまでのところ、.aspxを含むURLのみが機能します。たとえば、4error.aspxと入力すると、エラーページにリダイレクトされます。

/404error.aspx?aspxerrorpath=/4error.aspx

バックグラウンド

私は.NET開発者ではないため、クラシック.aspxを使用するこのプロジェクトを引き継ぎました。そのため、テンプレートやフレームワークでこれを構築するためにMicrosoft製品を使用していません。私は崇高なテキストでコーディングしています。

私がすでに調査したもの

Googleで見つけた記事をたくさん見ましたが、実際に機能する完全な例はありませんでした。

コード

これはweb.configで始めたコード全体です

web.config

<configuration>
  <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>
</configuration>

私はまた、Microsoftからこの例を見つけました(404error.aspxが私の変更でした)
http://msdn.Microsoft.com/en-us/library/vstudio/bb397417%28v=vs.100%29.aspx

web.config(2)

<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>
    <compilation debug="true" />

    <!-- Turn on Custom Errors -->
    <customErrors mode="On" 
      defaultRedirect="/404error.aspx">
      <error statusCode="404" redirect="/404Error.aspx"/>
    </customErrors>

  </system.web>
</configuration>

.aspxがないページも処理されませんでした

それから私はこの例を試しました

web.config(3)

<?xml version="1.0"?>
<configuration>
   <system.web>
    <customErrors mode="RemoteOnly" defaultRedirect="~/404error.aspx" />
    <error statusCode="404" redirect="~/404error.aspx" />
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
   </system.web>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="~/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="~/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="~/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
      <modules runAllManagedModulesForAllRequests="true"/>
   </system.webServer>
</configuration>

明らかに、404以外のページのパスを変更する必要がありますが、それらのエラーをテストしたいだけです。最後のweb.configはさらに悪い結果をもたらします。

何を変更する必要があるか教えてください。 <configuration>がいっぱいになるとどうなるか混乱してしまいます。

編集1

多くの開発者がHTMLページにすることを提案していることを読んだことがあります。だから今私のページは404.htmlですここに私の更新されたweb.configがあります

<configuration>
  <system.web>
    <customErrors mode="On"
              redirectMode="ResponseRewrite">
        <error statusCode="404"
           redirect="~/404.html"/>
      </customErrors>
      <globalization
        fileEncoding="utf-8"
        requestEncoding="utf-8"
        responseEncoding="utf-8"
        culture="en-US"
        uiCulture="de-DE"
      />
  </system.web>

  <system.webServer>
    <httpErrors errorMode="Custom"
            defaultResponseMode="File">
      <remove statusCode="404"/>
      <error statusCode="404"
          path="~/404.html"/>
    </httpErrors>
  </system.webServer>
</configuration>
12
JGallardo

<httpErrors>要素を構成する必要があります。これにより、静的ファイルとサーバーページの両方のエラーページが構成されます。

3回目の試行 "web.config(3)"と "編集1"はほぼがあります。問題は、ここではアプリ相対パス(例: "〜/ 404.html")を使用できないことです。これらは、サイトルート(例: "/404.html")からの相対パスでなければなりません。

<?xml version="1.0"?>
<configuration>
   <system.webServer>
      <httpErrors>
        <remove statusCode="401" subStatusCode="-1" />
        <remove statusCode="403" subStatusCode="-1" />      
        <remove statusCode="404" subStatusCode="-1" />                
        <remove statusCode="500" subStatusCode="-1" />
          <!-- full url when responsemode is Redirect -->
        <error statusCode="401" path="http://foo.com/default.htm" responseMode="Redirect" />
          <!-- local relative path when responsemode is ExecuteURL -->
        <error statusCode="403" path="/404error.aspx" responseMode="ExecuteURL" />
        <error statusCode="404" path="/404error.aspx" responseMode="ExecuteURL" />                
        <error statusCode="500" path="/404error.aspx" responseMode="ExecuteURL" />
      </httpErrors>
   </system.webServer>
</configuration>
8
Keith