Назад | Перейти на главную страницу

Пустая страница при использовании настраиваемых страниц ошибок 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.

Есть идеи, как мне это сделать?

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

Есть как минимум два способа обойти это, измените 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.config в ваши папки ошибок и разрешить анонимную аутентификацию для этого каталога, в конце концов, в нем есть только страницы с ошибками.