Página em branco ao usar páginas de erro personalizadas do IIS

Página em branco ao usar páginas de erro personalizadas do IIS

Estou executando um aplicativo baseado em PHP no IIS8, no Windows Server 2012. Estou tentando usar uma página de erro personalizada para tentativas de autenticação com falha - substituindo a página de erro 401.

Aqui está meu 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>

Quando tento acessar o site sem fornecer credenciais, tudo que vejo é uma página em branco. A fonte da página também está totalmente em branco - nenhuma tag html única.

Alguma idéia de como faço isso funcionar?

Responder1

Pense no que você está fazendo aqui. Você está dizendo que se o usuário não foi autenticado corretamente, exiba esta outra página para o usuário. Mas esta página (401) só pode ser exibida para usuários autenticados. Portanto, o IIS não tem permissão para mostrar essa página ao usuário e, em vez disso, exibe uma página em branco.

Existem pelo menos duas maneiras de contornar isso: altere seus httpErrors para:

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

Ao alterar o responseMode para File, o iis não executa mais uma URL e, em vez disso, carrega o conteúdo de um arquivo e o envia ao usuário. Isso sempre funciona independentemente do status de autenticação. O caminho é relativo à raiz do site.

A outra opção é adicionar um web.config às suas pastas de erros e permitir autenticação anônima para este diretório, afinal ele só possui páginas de erro.

informação relacionada