IIS カスタム エラー ページを使用する場合の空白ページ

IIS カスタム エラー ページを使用する場合の空白ページ

私は、Windows Server 2012 の IIS8 上で PHP ベースのアプリケーションを実行しています。401 エラー ページを置き換えて、認証の試行が失敗した場合にカスタム エラー ページを使用しようとしています。

私の web.config は次のとおりです:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="false" destination="https://my.website.co.uk" />
        <rewrite>
            <rules>
                <rule name="Hide Yii Index" stopProcessing="true">
                    <match url="." />
                    <action type="Rewrite" url="index.php" />
                    <conditions>
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                </rule>
            </rules>
        </rewrite>
<httpErrors errorMode="Custom" existingResponse="Replace">
       <remove statusCode="401" subStatusCode="-1" />
       <error statusCode="401" path="/errors/401.htm" responseMode="ExecuteURL" />
</httpErrors>
    </system.webServer>
</configuration>

資格情報を提供せずに Web サイトを表示しようとすると、空白のページしか表示されません。ページのソースも完全に空白で、HTML タグが 1 つもありません。

これを機能させる方法について何かアイデアはありますか?

答え1

ここで何をしているのか考えてみてください。ユーザーが正しく認証されていない場合は、この別のページをユーザーに表示するということです。しかし、この (401) ページは認証されたユーザーにのみ表示できます。そのため、IIS はユーザーにそのページを表示できず、代わりに空白のページが表示されます。

これを回避するには少なくとも 2 つの方法があります。httpErrors を次のように変更します。

<httpErrors errorMode="Custom" existingResponse="Replace">
   <remove statusCode="401" subStatusCode="-1" />
   <error statusCode="401" path="errors\401.htm" responseMode="File" />
</httpErrors>

responseMode を に変更するとFile、iis は URL を実行せず、代わりにファイルのコンテンツを読み込んでユーザーに送信します。これは、認証ステータスに関係なく常に機能します。パスは、Web サイトのルートに対する相対パスです。

もう 1 つのオプションは、エラー フォルダーに web.config を追加し、このディレクトリに対して匿名認証を許可することです。結局のところ、このディレクトリにはエラー ページしかありません。

関連情報