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.