Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 19-Apr-2006
< Voriger Tag   Nächster Tag >

Mittwoch, 19. April 2006

ydMaintainanceMode: Website in Wartungsmodus schalten (1)

ydMaintainanceMode schaltet eine Website in den Wartungsmodus. In diesem kann man selbst die Website unverändert benutzen für alle anderen erscheint dagegen der Hinweis, dass sich die Website im Wartungsmodus befindet.

So können umfangreiche Änderungen an der Site vorgenommen werden, z.B. neue Skripts aufgespielt werden, ohne dass für die Besucher Fehlermeldungen erscheinen, weil die Installation noch nicht komplett ist.

Das Ganze basiert auf einen Tipp, den Egon Schmid 2003 in de.comp.lang.php.misc gepostet hat und nutzt das mod_rewrite-Modul des Apache-Webservers, um auf die Wartungsseite umzuleiten. In die .htaccess-Datei wird dazu Folgendes eingetragen:

<IfModule mod_rewrite.c>
RewriteEngine on

RewriteCond %{REQUEST_URI}       !^/admin/maintainance\.php$
RewriteCond %{REMOTE_ADDR}       !^192\.168\.0\.2$
RewriteCond %{REQUEST_URI}       !^/MaintainanceInfo\.html$
RewriteRule .*                   /MaintainanceInfo.html  [R,L]
</IfModule>

Beschreibung

RewriteRule .*                   /MaintainanceInfo.html  [R,L]

Alle Seitenzugriffe .* werden auf /MaintainanceInfo.html umgeleitet. Das R in den eckigen Klammern [R,L] steht für Redirect - eine Umleitung auf eine andere Seite. Nur mit R angegeben sendet Apache dabei den 302 - MOVED TEMPORARILY-Statuscode. Dabei wird dem Ziel automatisch ein http:// mit dem Hostnamen vorangestellt, z.B. http://www.example.org/MaintainanceInfo.html.

Und das L für "last rule" sorgt dafür, dass keine weiteren Rewrite Rules ausgewertet werden und damit sofort die Umleitung stattfindet.

Die RewriteCond - Bedingungen

Damit die MaintainanceInfo.html-Seite angezeigt wird und man selbst die Website weiterhin komplett benutzten kann wird diese Umleitung nur ausgeführt, wenn die davor stehenden Bedingungen (RewriteConds) erfüllt sind:

RewriteCond %{REQUEST_URI}       !^/MaintainanceInfo\.html$

Die Regel nur ausführen, wenn man sich nicht schon auf der Seite MaintainanceInfo.html befindet. Ohne diese Bedingung würde endlos umgeleitet werden und nie die Seite mit der Wartungsinfo erscheinen. Das Ausrufezeichen vor !^/MaintainanceInfo\.html$ steht dabei für Not (nicht).

RewriteCond %{REMOTE_ADDR}       !^192\.168\.0\.2$

Man selbst wird über die eigene IP-Adresse (REMOTE_ADDR) erkannt. Die Regel also nur ausführen, wenn REMOTE_ADDR nicht die eigene IP-Adresse (192.168.0.2) enthält. Das Erkennen per IP-Adresse macht allerdings nur Sinn, wenn man direkt auf die Website zugreift und kein Web-Proxy dazwischen liegt, z.B. automatisch bei AOL der Fall, ansonsten ruft man die Site nicht mit der eigenen IP-Adresse auf, sondern mit der des Web-Proxys, die man sich mit anderen Nutzer teilt, die dann ebenfalls auf die Site zugreifen können, was man ja verhindern möchte.

RewriteCond %{REQUEST_URI}       !^/admin/maintainance\.php$

Damit man sich selbst nicht aussperrt bleibt die Admin-Seite fürs An- und Ausschalten des Wartungsmodus immer aufrufbar. Zum Beispiel nützlich, wenn die Verbindung abbricht und man bei der neuen Einwahl ins Internet eine andere IP-Adresse erhält.

Implementierung

Die einfachste Implementierung besteht darin, die obigen Zeilen zum Einschalten des Wartungsmodus an den Anfang der .htaccess-Datei zu setzen und zum Ausschalten die Zeilen wieder zu entfernen. Das PHP-Skript sorgt dafür, dass die IP-Adresse passend gesetzt wird.

  1. Es gibt schon eine .htacess-Datei: Die Rewrite Rule wird am Anfang der .htaccess-Datei eingefügt.
  2. Es gibt noch keine .htaccess-Datei: Es wird eine .htaccess-Datei mit der Rewrite Rule erzeugt.

Damit sich die Routinen allgemein benutzen und testen lassen werden sie in eine Klasse gepackt:

class YD_MaintainanceMode
{
    var $filename; // Pfad plus Dateiname zur .htaccess-Datei
    var $htaccess; // Inhalt der .htaccess-Datei

    function YD_MaintainanceMode($filename = null)

    function load() -- .htaccess laden
    function save() -- .htaccess speichern
       
    function on()   -- Zeilen für Wartungsmodus einfügen
    function off()  -- Zeilen für Wartungsmodus entfernen 
}// YD_MaintainanceMode   

TODO

  • Tests
  • Klasse programmieren
  • Was ist für Suchmaschinen besser? Umleitung (302) oder 503 Service Unavailable?

Links

[Direktlink]

< Voriger Tag   Nächster Tag >

  RSS V0.91

<April 2006 >
     0102
03040506070809
10111213141516
17181920212223
24252627282930

Home-Produkte-Testarea-Kontakt-Datenschutz-Aktualisiert: 19-Apr-2006
(C) 2000-2018 by Sven Drieling