wake-up-neo.com

IIS7-Standard 404 wird nicht angezeigt

eine neue IIS7-Website mit Intergrated .net 4.0-App-Pool erstellt.

URLs, die mit .aspx enden, zeigen benutzerdefinierte 404 an. Andernfalls gibt die blaue Serverfehlerseite "HTTP-Fehler 404.0 - Nicht gefunden Die von Ihnen gesuchte Ressource wurde entfernt, der Name wurde geändert oder ist vorübergehend nicht verfügbar. " (also nichts mit 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 von appcmd zum Testen der benutzerdefinierten http-Fehlerbehandlung gefunden, 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, weil in iis7 manager die fehlerseiten angezeigt werden

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 unternehmen, damit eine vollständig neue asp .net 4 iis7-Site für jedes 404-Ergebnis eine benutzerdefinierte .net-Fehlerseite hat?

Frage 2: Warum funktioniert der .net-Handler für ASPX-Dateien und sonst nichts?

hinweis: Legen Sie 404 auf Serverebene fest, und der Befehl appcmd zeigt dann die benutzerdefinierte 404 im Pfad an, macht jedoch keinen Unterschied, dass die Site 404 nicht anzeigt.

Ich vermute, es ist ein roter Hering.

40
rob

antwort war zu verwenden 

    <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 haben

dies funktionierte für ASPX- und Nicht-ASPX-Anforderungen.

bizarrerweise kam diese Kombination in keinem der Blogposts und Stackoverflow-Antworten, die ich untersucht hatte, auf. Es war nur Glück, dass ich es ausprobierte. 

110
rob
<httpErrors existingResponse="PassThrough" />

arbeitete für mich in IIS 7 (Windows Server 2008 R2).

Mein Problem war, dass ich dies in meiner web.config hatte, aber in einem <location>. Das Verschieben in das Stammverzeichnis <system.webServer> hat es behoben.

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

Für IIS7 und höher sollten Sie nur httpErrors verwenden, wie in der Antwort von Rob: https://stackoverflow.com/a/6661699

Nur um hinzuzufügen, wenn Sie ASP.NET zum Rendern Ihrer Fehlerseite nicht benötigen/möchten, würde ich die Verwendung statischer HTML-Dateien empfehlen, um die Abhängigkeit von ASP.NET zu entfernen. Achten Sie einfach darauf, keinen führenden Schrägstrich auszulassen, und verwenden Sie für den Rest des Pfads umgekehrte Schrägstriche, z.

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

Stellen Sie responseMode="File" ein, um den korrekten Statuscode beizubehalten.

0
James Rogers

Ich hatte dieses Problem mit meiner Web-App und konnte es beheben, indem ich die Weiterleitungszeile auskommentierte:

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

Auf IIS war allowAbsolutePathsWhenDelegated (im Konfigurationseditor -> system.webServer/httpErrors) gesperrt, und ich kann den Wert false nicht in true ändern.

0
Dennis R