Leere Seite bei Verwendung benutzerdefinierter IIS-Fehlerseiten

Leere Seite bei Verwendung benutzerdefinierter IIS-Fehlerseiten

Ich führe eine PHP-basierte Anwendung auf IIS8 unter Windows Server 2012 aus. Ich versuche, eine benutzerdefinierte Fehlerseite für fehlgeschlagene Authentifizierungsversuche zu verwenden, indem ich die 401-Fehlerseite ersetze.

Hier ist meine 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>

Wenn ich versuche, die Website ohne Angabe von Anmeldeinformationen aufzurufen, wird mir nur eine leere Seite angezeigt. Auch die Quelle der Seite ist völlig leer – kein einziger HTML-Tag.

Irgendwelche Ideen, wie ich das hinbekomme?

Antwort1

Überlegen Sie, was Sie hier tun. Sie sagen, wenn der Benutzer nicht korrekt authentifiziert wurde, soll ihm diese andere Seite angezeigt werden. Aber diese (401)-Seite kann nur authentifizierten Benutzern angezeigt werden. Daher darf IIS dem Benutzer diese Seite nicht anzeigen und zeigt stattdessen eine leere Seite an.

Es gibt mindestens zwei Möglichkeiten, dies zu umgehen. Ändern Sie Ihre httpErrors in:

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

Durch Ändern des responseMode auf Fileführt IIS keine URL mehr aus, sondern lädt stattdessen den Inhalt einer Datei und sendet ihn an den Benutzer. Dies funktioniert immer, unabhängig vom Authentifizierungsstatus. Der Pfad ist relativ zum Stamm der Website.

Die andere Möglichkeit besteht darin, Ihren Fehlerordnern eine web.config hinzuzufügen und die anonyme Authentifizierung für dieses Verzeichnis zuzulassen, da es schließlich nur Fehlerseiten enthält.

verwandte Informationen