2012-12-29 3 views
14

Ich habe den Rat from this article für die Einrichtung einer Datei "robots.txt" in asp.net mvc3 für die Verwendung eines Controllers für die Serverantwort folgen, und IIS 8.0 Express gibt eine Datei zurück Fehler nicht gefunden, sondern ein asp.net-Fehler.URL mit Erweiterung nicht von Routing behandelt

Wie bekomme ich IIS, in diesen Fällen nicht nach einer Datei zu suchen? Gibt es etwas, das ich in der web.config brauche?

Antwort

35

IIS versucht hier intelligent zu sein. Er fängt den Punkt in der URL ab und denkt, dass dies eine statische Datei ist, und versucht, sie mit dem Standardhandler StaticFile zu bedienen. Das Ereignis wird nicht in die verwaltete ASP.NET-Anwendung geleitet.

Die erste Möglichkeit ist die folgende in Ihrer web.config

<system.webserver> 
    <modules runAllManagedModulesForAllRequests="true" /> 

hinzufügen, aber das ist eigentlich nicht etwas, was ich dir tun würde empfehlen, da dies einen negativen Effekt auf die Leistung der Anwendung haben könnte, weil jetzt alle Anforderungen an statische Dateien (wie .js, .css, images, ...) werden durch die verwaltete Pipeline geleitet.

Der empfohlene Ansatz ist es, die folgende Prozedur, um Ihre web.config (<handlers> Tag von <system.webServer>) hinzuzufügen:

<system.webServer> 
    <handlers> 
     <add name="Robots-ISAPI-Integrated-4.0" path="/robots.txt" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
     ... 
    </handlers> 
</system.webServer> 

Beachten Sie, wie wir festgelegt haben, dass diese Prozedur nur auf eine bestimmte URL und HTTP-Verb gelten.

Jetzt, wenn Sie GET /robots.txt GET, wird IIS nicht mehr mit dem StaticFile Handler behandeln, sondern wird es stattdessen an die verwaltete Pipeline ASP.NET übergeben. Und dann wird es von der Routing-Engine abgefangen und an die entsprechende Controller-Aktion weitergeleitet.

+2

Gibt es eine Möglichkeit für den Umgang mit statischen Dateien IIS Verhalten zu halten, aber wenn die Datei nicht gefunden wird, statt eine IIS 404-Seite dienen , übergeben Sie es zur Überprüfung in die verwaltete Pipeline? –

+0

Ah ha, [gefunden] (http://stackoverflow.com/questions/4483849/default-redirect-for-error-404)! –

0

Wenn Sie eine dynamisch generierte robots.txt Datei benötigen, die nur sehr selten notwendig, sind nur die folgenden:

  • die Route Ignorieren

    routes.IgnoreRoute robots.txt ("robots.txt");

  • die robots.txt-Datei auf Ihr Root-Verzeichnis hinzufügen

+1

Eigentlich tut dies standardmäßig IIS ohne jede Konfiguration. (Jede URL mit einer Erweiterung wird neben den .aspx 'Dateien' wie eine Datei behandelt) –

+0

Wir haben tatsächlich einen Anwendungsfall dafür: Roboter auf Entwicklungsstandorten zu verleugnen (nur für den Fall, dass wir die Firewall-Einstellungen durcheinander bringen), aber zulassen Produktion (mit einer 'web.config' Änderung). –

+0

Ich habe auch einen Anwendungsfall. 3 Umbraco Websites, die dieselbe Anwendung ausführen. Ich muss verschiedene robots.txt-Dateien für jede Domäne bereitstellen. –