Frage Wie kann ich einen 503-Status im Apache zurückgeben, ohne externe Skripte aufzurufen?


Ich muss einen 503-Status-Code von einer meiner Websites zurückgeben, wenn er in der altehrwürdigen SE_firendly-Mode für Wartungsarbeiten ausfällt. Ich kann nicht herausfinden, wie das geht, ohne externe Skripte aufzurufen, was ich lieber vermeiden würde.

Gibt es eine Apache-Direktive, die es mir erlaubt, einen beliebigen HTTP-Statuscode zurückzugeben, ohne auf Hacks wie das Aufrufen eines PHP-Skripts zurückzugreifen, das den Statusheader setzt?


25
2017-08-12 03:40


Ursprung


Ich bin mir nicht ganz sicher, ob das Ausführen einer PHP-Datei als "Hack" eingestuft wird ... das ist genau das, was ein Webserver so machen soll ... - Mark Henderson♦
Hm. Ich denke, dass das Aufrufen einer ganzen interpretierten Skriptsprache, um eine einzelne Zeile der Serverantwort festzulegen, sich als Hack qualifiziert. Das Festlegen von Zeilen mit Antwortheadern ohne aufwändige Problemumgehungen scheint mir näher an dem zu liegen, wofür Webserver entwickelt wurden. - dan mackinlay
Gleiche Frage an webmaster.stackexchange.com/questions/61241/... - rubo77


Antworten:


Dies dient jeder Anfrage als statische Holding-Seite zusammen mit dem Status 503.

RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"

RedirectMatch wird verwendet, um die Holding-Seite selbst zu negieren, die sonst eine Endlosschleife erzeugen würde.

mod_header wird verwendet, um einen Wiederholungs-Nachher-Header festzulegen, sodass Sie Google / andere Bots usw., die Sie in diesem Beispiel nach 18.000 Sekunden (5 Stunden) sichern müssen, mitteilen können. Sie können sudo ap2enmod header um mod_header zu aktivieren (was für die Header-Direktive erforderlich ist).


30
2017-08-13 23:52



+1: Ein Seitenkommentar: Sie können nur [RedirectMatch 503. *] Und die [Header-Immer-Set-Wiederholungs-Nach "18000"] -Regeln hinzufügen und es funktioniert mit der Standard-503-Fehlermeldung. Überprüfen Sie, ob die Datei conf.d / localized-error-pages eine andere Nachricht für verschiedene Sprachen enthält (diese benötigen Verhandlungs-, Alias- und Include-Module). - lepe
Es klappt! Für meine persönliche Website nutze ich RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg). - bwDraco


Versuchen

Redirect 503 / /

Von http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :

Andere Statuscodes können zurückgegeben werden, indem der numerische Statuscode als Statuswert angegeben wird. Wenn der Status zwischen 300 und 399 liegt, muss das URL-Argument vorhanden sein, andernfalls muss es weggelassen werden. Beachten Sie, dass der Status dem Apache-Code bekannt sein muss (siehe die Funktion send_error_response in http_protocol.c).

Zusätzliche Anmerkung: Dies zeigt das Standard / konfigurierte ErrorDocument für den Fehler 503 an.


7
2017-08-12 04:46



Danke David. mod_alias ist nicht dort, wo ich diese Antwort erwartet hätte, aber es scheint den Job zu machen. - dan mackinlay
Ja, Redirect ist nicht wirklich das richtige Verb für das was du machst :) - David Pashley
Redirect 503 es fehlt ein Argument, URL-Pfad, der immer obligatorisch ist. Die URL muss jedoch weggelassen werden, wenn der umgeleitete Code nicht 300-399 ist
Ich bekomme einen Fehler dabei: "Umleitung dauert zwei oder drei Argumente, ein optionaler Status, dann umzuleiten Dokument und Ziel-URL", können Sie ein vollständigeres Beispiel im Zusammenhang geben? - Tom
Redirect 503 / scheint zu funktionieren. - mpartel