Falls jemand sich fragt, ob die Web-Konfiguration dieser Person wahrscheinlich aussieht:
%Vor%
Wenn in der früheren Version von IIS ein benutzerdefiniertes Skript einen Fehlercode zurückgegeben hat, hat IIS es ignoriert und durchgelassen. Aber Sie könnten es auch einrichten, um den Fehlerstatus mit benutzerdefinierten Skripts zu behandeln.
Wenn auf meinem alten Server eine URL 404 war, wurde IIS zum Ausführen der Datei /404.cfm eingerichtet, die eine Fehlerseite und einen 404-Statuscode mit <cfheader>
zurückgegeben hat.
Wenn jedoch jetzt das Skript einen 404-Statuscode zurückgibt, gibt das IIS einen Serverfehler zurück und gibt die Antwort nicht mit dem Statuscode 404 zurück.
Die einzige Möglichkeit, dies zu vermeiden, ist die Verwendung von existingResponse="PassThrough"
und die Verwendung einer siteweiten Vorlage "Template Not Found" in CFAdmin.
Hier ist der interessante Teil. Ich habe index.cfm als Standard-Index und den only Standard-Index für meine Website eingerichtet.
Wenn ich zu /about/
gehe und /about/index.cfm
exists, dann rendert es die Seite, als hätte ich sie nach /about/index.cfm
gefragt.
Und wenn ich zu /about/index.cfm
und /about/index.cfm
gehe nicht gehe, wird die siteweite 404-Vorlage ausgeführt.
Aber Wenn ich zu /about/
gehe und /about/
nicht als URL existiert, versucht nicht % zu laden co_de% und löst somit die siteweite 404-Vorlage aus. Stattdessen rendert es eine leere Seite!
Soweit ich das beurteilen kann, gibt es keine praktikable Lösung für dieses Problem . Es sieht so aus, als könnten nur Leute, die in .Net schreiben, dieses Problem lösen, da sie ein Flag in die Response setzen können, die sie generieren und die IIS "Issue the status code" sagen. Ich denke, dass Microsoft einfach nicht daran interessiert ist, alternative Webanwendungen zu unterstützen.
Grundsätzlich ist dies die Lösung:
löscht /about/index.cfm
und gibt die falschen Statuscodes zurück .
Alles andere wird zu schwer zu implementieren sein. Beachten Sie, dass dies nicht funktioniert, wenn Sie eine RESTful App oder API erstellen. In diesem Fall müssen Sie nur ein virtuelles Verzeichnis erstellen, für das Sie eine benutzerdefinierte Datei web.config zuweisen können, die existingResponse="PassThrough"
verwendet. Aber wenn Sie in der Lage sein müssen, benutzerdefinierte Fehlerbehandlung und benutzerdefinierte 404-Behandlung zu ermöglichen, sind Sie effektiv geschraubt.
Die gute Nachricht ist, abgesehen von API und Ajax, dass sich jemand nur darum kümmern wird, was der Statuscode eigentlich ist, wenn er sich die Header trotzdem ansieht. In diesem Fall sehen sie, dass Sie laufen IIS und bedauern Sie nur.