Пустая страница при использовании пользовательских страниц ошибок IIS

Пустая страница при использовании пользовательских страниц ошибок IIS

Я запускаю приложение на основе PHP на IIS8 под управлением Windows Server 2012. Я пытаюсь использовать пользовательскую страницу ошибок для неудачных попыток аутентификации, заменив страницу ошибки 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>

Когда я пытаюсь посмотреть на сайт без предоставления учетных данных, все, что я вижу, это пустая страница. Исходный код страницы тоже полностью пустой - ни одного тега html.

Есть идеи, как это реализовать?

решение1

Подумайте, что вы здесь делаете. Вы говорите, что если пользователь не прошел аутентификацию правильно, покажите пользователю эту другую страницу. Но эта страница (401) может быть показана только аутентифицированным пользователям. Поэтому IIS не имеет права показывать эту страницу пользователю и вместо этого отображает пустую страницу.

Есть как минимум два способа обойти это: измените httpErrors на:

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

При изменении responseMode на Fileiis больше не выполняет URL, а вместо этого загружает содержимое файла и отправляет его пользователю. Это всегда работает независимо от статуса аутентификации. Путь указывается относительно корня веб-сайта.

Другой вариант — добавить файл web.config в папки с ошибками и разрешить анонимную аутентификацию для этого каталога; в конце концов, в нем есть только страницы ошибок.

Связанный контент