web-dev-qa-db-ja.com

IIS 8.5-静的404ファイルを返すときにエラーが発生する

IIS8.5>サイト> mysite>エラーページ> 404

  • 「静的ファイルからエラー応答にコンテンツを挿入」を選択します。

  • 「クライアント言語でエラーファイルを返してみる」のチェックを外します。

  • 「notfound.html」へのパスを入力してください。パスが存在することを確認しました。

ページにアクセスすると、そこにないことがわかります。

The page cannot be displayed because an internal server error has occurred.

カスタム404ファイルを取得できないのはなぜですか?

私はそれが許可事項だとは思わない、 "notfound.html"をいくつかの場所に移動してみました。そのうちの1つは、サイトの残りの部分を提供する実際のサイトwwwrootフォルダです。

4
Marcus

このエラーは、絶対パスがweb.configで検出されたために生成されます。

C:\path\to\notfound.htmlファイルのsystem.webServer/httpErrorsセクションでは、絶対物理パス(web.configなど)を使用できません。

今あなたは2つの解決策を持っています:


1。ApplicationHost.configファイルで物理パスを許可

デフォルトでは、このファイルは%SystemRoot%\system32\inetsrv\configにあります

このファイルを見つけて編集します

セクション<httpErrors ..... >を検索

次に、ディレクティブallowAbsolutePathsWhenDelegated="true"を次のように追加します。

<httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath" allowAbsolutePathsWhenDelegated="true">
   ....
   ....
</httpErrors>

ファイルを保存してください、うまくいくはずです!


2。相対パスを使用

相対パスは、特定のWebサイトのルートフォルダーにカスタムエラーページを保存する必要があることを意味します。

次に、IIS > Sites > mysite > Error Pages > 404に移動します

そして、次のようにカスタムエラーページをセットアップします:

enter image description here

OKをクリックします。動作するはずです。


編集:

ただし、次のことに注意してください。

  • ソリューション1は404 Not Found応答を送信します
  • ソリューション2は200 OK応答を送信します
3
krisFR

私はあちこち調べて、デフォルトで「false」に設定されている「allowAbsolutePathsWhenDelegated」というものがあることを発見しました。

IIS8.5 > Sites > mysite > Management > Configuration Editor > system.webServer/httpErrors

ただし、値はロックされており、そこで編集することはできません。そこで、ツリーのルートをクリックして、そこで編集できるようにしました。

IIS8.5 > Management > Configuration Editor > system.webServer/httpErrors

ルートの名前は実際には「IIS8.5」ではなく、コンピューター名にちなんで付けられていることに注意してください。

したがって、allowAbsolutePathsWhenDelegatedがtrueに設定された後、すべてが正常に機能しました。別の解決策は、静的ファイルをサイトのwwwrootフォルダー内に配置し、その名前を404エラーページとして入力することでした(私の場合は、相対パスではなく絶対パスを使用する方が適切です)。

このデフォルトの制限については、「エラーページ」画面のどこにも言及されていないことがバグです。これは、パスがサイトルートからの相対パスである必要があることについては何も述べていません。デフォルトは相対パスではないため(inetpubフォルダー内にあるため)、絶対パスが適切に機能すると想定します。

マイクロソフトがこのインターフェイスの問題を今後のバージョンで修正することを期待しています。入力フィールドの制限については、もっと明確にしてください。

1
Marcus