2008-11-18 9 views
49

Für meine IIS-Website möchte ich ALLE Anfragen auf EINE Seite umleiten. Der Zweck davon ist, dass ich einige Wartungsarbeiten an der Datenbank durchführen möchte (offline nehmen), die alle meine Webanwendungen verwenden. Ich habe ungefähr 50 Web-Apps, die unter dieser Website laufen, daher möchte ich vermeiden, jeden von ihnen zu besuchen, um etwas zu ändern. Ich denke, ich könnte eine einzige Änderung in machine.config machen? Irgendwelche Hinweise würden geschätzt werden.IIS: Alle Anfragen auf eine Seite umleiten?

Antwort

10

Machen Sie alle Seiten nicht verfügbar, wahrscheinlich stoppen Sie die aktuelle Website und erstellen Sie eine komplett neue, komplett leere Website an ihrer Stelle. Fügen Sie dann eine benutzerdefinierte Fehlerseite für den Fehler 404 (file ot found) ein. Benutzerdefinierte Fehler ist eine Registerkarte im Eigenschaftendialog der Website in IIS. Erstellen Sie einfach die Seite, die Sie senden möchten, und ändern Sie den Eintrag für 404 auf der Registerkarte "Benutzerdefinierte Fehler" so, dass er auf die neue Datei verweist, die Sie gerade erstellt haben.

+0

Dies war ein ausgezeichneter Vorschlag, und arbeitete für meine große Mischung .NET/klassische ASP-Anwendungen. Sehr einfach zu implementieren. – Mike

+1

Es gibt ein großes Problem damit, obwohl ästhetisch die Benutzeroberfläche funktioniert, wenn Sie zufällig eine Suchmaschine haben, die Ihre Website crawlt, wird es plötzlich eine Reihe von 404s erhalten und den Inhalt aus den Suchergebnissen entfernen. – Talon

80

Wenn Sie ASP.NET 2.0 (oder höher) verwenden, können Sie eine Seite "app_offline.htm" im Stammverzeichnis löschen.

More info here.

+0

Das ist cool, das wusste ich nicht. Obwohl unsere Seiten bei der Arbeit eine Mischung aus aspx und htm Seiten sind, würde es für uns nicht funktionieren. – pipTheGeek

+0

Schön, das war mir auch nicht bewusst. –

+0

Ich habe von app_offline.htm erfahren, in dem ich Scott Gus Blog gelesen habe, bin aber überrascht, dass ich es nicht woanders gelesen habe. Es funktioniert wie angekündigt, was hilft. –

36

in webconfig

<rewrite> 
     <rules> 
      <rule name="redirect all requests" stopProcessing="true"> 
       <match url="^(.*)$" ignoreCase="false" /> 
       <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" /> 
       </conditions> 
       <action type="Rewrite" url="index.php" appendQueryString="true" /> 
      </rule> 
     </rules> 
    </rewrite> 
+6

Geben Sie eine +1 weil es ist eine alternative Lösung (die zufällig für mich funktioniert), aber es sollte darauf hingewiesen werden, dass ein Neuschreiben nicht dasselbe wie eine Weiterleitung ist. Wenn also eine echte Weiterleitung erforderlich ist, wird dies nicht funktionieren. – Davy8

+3

Wenn Sie eine Umleitung benötigen, müssen Sie nur den Aktionstyp in Umleiten ändern. – rcdmk

+3

Diese Rewrite-Regel leitet Anfragen nur in Ordner und nicht in Dateien um. Das OP wollte * alle * Anfragen umleiten. Entfernen Sie dazu das Symbol "". – Keith

1

Könnten Sie eine neue Website in IIS mit einer Bindung an Port 80 mit einem leeren Host-Header (ähnlich wie die Standard-Website) erstellen und dann die andere Seite nicht mehr (s)? Auf diese Weise werden alle Anfragen von der neuen Site bearbeitet, bei der es sich einfach um eine statische HTML-Seite handeln kann, die Benutzern mitteilt, dass die Site wegen Wartungsarbeiten nicht erreichbar ist.