42 Stimmen

IIS7 benutzerdefinierte 404 nicht angezeigt

Eine neue IIS7-Website mit integriertem .net 4.0-App-Pool erstellt.

Bei URLs, die mit .aspx enden, wird ein benutzerdefinierter 404-Fehler angezeigt, bei allen anderen wird die blaue Server-Fehlerseite angezeigt "HTTP-Fehler 404.0 - Nicht gefunden Die Ressource, nach der Sie suchen, wurde entfernt, ihr Name wurde geändert oder sie ist vorübergehend nicht verfügbar. (hat also nichts mit dem IE zu tun)

<customErrors redirectMode="ResponseRewrite" mode="On" defaultRedirect="/pages/404.aspx" />
</system.web>
<system.webServer>
    <httpErrors  >
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

auch versucht

<httpErrors existingResponse="PassThrough" />

aber das führte nur zu einer leeren Antwort.

Ich habe nur einen Hinweis auf die Nützlichkeit der Ausführung des appcmd gefunden, um die benutzerdefinierte http-Fehlerbehandlung zu testen, aber hier sind die Ergebnisse.

C:\Windows\System32\inetsrv>appcmd list config "http://mysite/file.notexist" -section:httpErrors

<system.webServer>
    <httpErrors>
        <error statusCode="401" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="401.htm" />
        <error statusCode="403" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="403.htm" />
        <error statusCode="404" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="404.htm" />
        <error statusCode="405" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="405.htm" />
        <error statusCode="406" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="406.htm" />
        <error statusCode="412" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="412.htm" />
        <error statusCode="500" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="500.htm" />
        <error statusCode="501" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="501.htm" />
        <error statusCode="502" prefixLanguageFilePath="%SystemDrive%\inetpub\custer
r" path="502.htm" />
    </httpErrors>
</system.webServer>

was seltsam ist, denn im iis7-Manager zeigen die Fehlerseiten

404 /pages/404.aspx Execute URL Local

.Net Error Pages zeigt nichts an, obwohl ich dort einen Eintrag hatte.

Frage 1: Welche Schritte muss ich für eine völlig neue asp .net 4 iis7 Website, um eine benutzerdefinierte .net-Fehlerseite für jedes 404-Ergebnis haben?

Frage 2: Warum funktioniert der .net-Handler für .aspx-Dateien und nicht für andere?

Hinweis: Die 404 auf Serverebene gesetzt und der appcmd-Befehl dann zeigte die benutzerdefinierte 404 in den Pfad, aber machte keinen Unterschied zu der Website nicht zu zeigen 404.

Ich vermute also, dass es sich um ein Ablenkungsmanöver handelt.

117voto

rob Punkte 7557

Die Antwort war die Verwendung von

    <httpErrors existingResponse="Replace" errorMode="Custom">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/pages/404.aspx?he" responseMode="ExecuteURL" />
    </httpErrors>

und keine system.web customErrors zu haben

dies funktionierte sowohl für .aspx- als auch für nicht .aspx-Anfragen.

Seltsamerweise kam diese Kombination in keinem der Blogbeiträge und Stackoverflow-Antworten vor, die ich recherchiert hatte, es war reiner Zufall, dass ich es ausprobierte.

6voto

mhenry1384 Punkte 7322
<httpErrors existingResponse="PassThrough" />

funktionierte bei mir in IIS 7 (Windows Server 2008 R2).

Mein Problem war, dass ich dies in meiner web.config hatte, aber in einer <location> . Verschieben zur Wurzel <system.webServer> repariert.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    ...
    <system.webServer>
        ...
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>

0voto

James Rogers Punkte 21

Für IIS7 aufwärts, gehen mit httpErrors nur, wie pro rob's Antwort: https://stackoverflow.com/a/6661699

Wenn Sie nicht ASP.NET zum Rendern Ihrer Fehlerseite verwenden müssen/wollen, würde ich empfehlen, statische HTML-Dateien zu verwenden, um die Abhängigkeit von ASP.NET zu beseitigen. Stellen Sie nur sicher, dass Sie jeden führenden Schrägstrich weglassen und Backslashes für den Rest des Pfades verwenden, z. B.

<error statusCode="404" prefixLanguageFilePath="" path="pages\404.html" responseMode="File" />

Satz responseMode="File" um den korrekten Statuscode beizubehalten.

0voto

Dennis R Punkte 41

Ich hatte dieses Problem mit meiner Webanwendung und konnte es lösen, indem ich die Redirect-Zeile auskommentierte:

    <httpErrors>
        <remove statusCode="403" subStatusCode="-1" />
        <!--<error statusCode="403" prefixLanguageFilePath="" path="C:\inetpub\redirectSItoHttps.htm" responseMode="File" />-->
    </httpErrors>

Auf IIS wurde allowAbsolutePathsWhenDelegated (auf Configuration Editor --> system.webServer/httpErrors) gesperrt und ich kann den Wert false nicht in true ändern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X