<Location /status>
SetHandler server-status
order deny,allow
allow from all
</Location>
Aber wenn ich besuche http://ip:port/status
,
a 404 Not Found
wird gemeldet, warum?
apache-2.2
Linux
quelle
quelle
server-status
? Ich musste nie eine physische Datei auf der Festplatte haben, umserver-status
arbeiten zu können.SetHandler server-status
?Antworten:
Dies kann auch passieren, wenn Sie eine
.htaccess
Datei im Dokumentstamm haben und diese Datei eine enthältRewriteRule
, wie es bei hübschen CMS-URLs üblich ist.Die Erklärung für dieses Verhalten lautet wie folgt. Die
<Location>
Anweisungen handeln zuerst, aber der Handler wird zu diesem Zeitpunkt nicht aufgerufen. DannRewriteRule
setzt das einen Handler, zB um ein PHP-Skript auszuführen,SetHandler
hat also am Ende keine Auswirkung.Wenn dies die Ursache ist, suchen Sie die Ursache
RewriteRule
(*) und fügen Sie sie hinzu:Dies schließt den
server-status
URIRewriteRule
auf die gleiche Weise aus, wie vorhandene statische Dateien ausgeschlossen werden können. Natürlich/server-status
muss dasLocation
, was Sie anstelle von verwenden, genau mit dem gewählten übereinstimmen , was in der Frage stattdessen steht/status
. (Getestet auf Apache 2.2.22 und Apache 2.4)Nachtrag: Beachten Sie auch, dass Sie einen 403 erhalten können, der versucht, das zu lesen,
server-status
wenn dasDocumentRoot
vom Apache-Prozess überhaupt nicht lesbar ist, da der Server-Status-Handler keine Chance hat, zu arbeiten.Anhang 2: Wenn die
.htaccess
für die Apache-Standardwebsite häufig überschrieben wird und die/server-status
URL erforderlich ist, damit beispielsweise Munin funktioniert, ist das Erstellen einer<VirtualHost 127.0.0.1:80>
Zeilengruppe mit dem Serverstatus-Handler möglicherweise administrativ am einfachsten.Anhang 3 (*): Das
RewriteRule
Problem verursacht möglicherweise alles, was mit der Zeichenfolge übereinstimmt/server-status
. Dies kann erkennbar sein, weil der erste Parameter mit etwas übereinstimmt, z. B. dort,RewriteRule .
wo.
er mit einem beliebigen Zeichen übereinstimmt^(.*)
, oder auf andere Weise den URI abfängt, z.*\bstatus$
. Sie können es auch identifizieren, weil es vorhandene Dateien mit absichtlich ausschließt!-f
.Wenn beispielsweise WordPress die Hauptseite ist und Sie
/server-status
darauf erscheinen möchten und aus irgendeinem Grund Addendum 2 oben nicht anwendbar ist, möchten Sie möglicherweise eine zusätzliche SiteRewriteCond
wie folgt einfügen :Es schadet jedoch wahrscheinlich vor keinem
RewriteRule
.quelle
RewriteEngine on
für jeden virtuellen Host, in dem Sie Umschreiberegeln verwenden möchten, eine Direktive benötigen . Ich denke, dies bedeutet, dass ich die oben genanntenRewriteCond
Punkte jeweils einmal konfigurieren müssteRewriteRule
. Deshalb habe ich mich entschieden, ein<VirtualHost 127.0.0.1>
wie in Anhang 2 oben vorgeschlagenes zu erstellen , um mit mehreren umzugehenRewriteRules
. Und es scheint zu funktionieren!RewriteEngine
ist ein roter Hering. Es muss bereits sein,on
dass die Regel eingreift/server-status
. Ich habe jedoch nicht gesagt, wie man die Regel identifiziert, "die das Problem verursacht", und vielleicht sollte ich das Hinzufügen der Zeile für jede Regel sparen: Die Regel ist wahrscheinlich eine generische Regel, bei der der erste Parameter ist.
oder sein.*
kann vorangestellt von anderenRewriteCond
Anweisungen wie dem Ausschließen einer Datei!-f
.Ich würde vermuten, dass Sie das Statusmodul nicht geladen haben - können Sie es bestätigen?
quelle
Weil du etwas falsch konfiguriert hast. Was sagen Ihre Protokolle über die Ursache des 404 aus? Meine erste Vermutung wäre, dass dies
ip:port
kein gültiger vhost ist (oder zumindest nicht gültig für den vhost, den Sie eingegeben haben<Location /status>
), und dass er wahrscheinlich auf den Standard-vhost zurückfällt. In den Fehlerprotokollen werden irrationale Pfade erwähnt, die Sie nicht konfiguriert haben, wenn dies der Fall ist. Andere Fehlerprotokollmeldungen bedeuten andere Dinge, weshalb es so wichtig ist, sie zu überprüfen.quelle
File does not exist
Die Dokumente sind:
Ihr Standort unterscheidet sich, ich würde nicht denken, dass es wichtig sein sollte, aber versuchen Sie Ihren Standort als / server-status anstatt nur / status.
Ich denke jedoch, dass Spud Recht hat. Sie haben dieses Modul nicht geladen.
-sean
quelle
Wenn Sie WampServer verwenden , wie ich es für die Entwicklung bin, notieren Sie Folgendes:
Die
httpd-info.conf
Datei unterwamp\bin\apache\apache[version]\conf\extra
enthält die entsprechende<Location>
Konfiguration:<Location /server-status> SetHandler server-status #Require host .example.com #Require ip 127 </Location>
Diese Datei kann tatsächlich in Ihrer Apache-Konfiguration enthalten sein oder nicht. Suchen Sie in Ihrer
httpd.conf
Datei nach der folgenden Zeile und stellen Sie sicher, dass sie nicht kommentiert ist:Include conf/extra/httpd-info.conf
In meinem Fall war das Hauptproblem das letztere: Die Zeile wurde standardmäßig kommentiert und daher
httpd-info.conf
nicht einmal geladen.quelle
https://serverfault.com/a/388457/ hatte die Antwort für mich. Muss den Anruf aktiv blockieren, anstatt zu versuchen, jede .htaccess RewriteRule zu finden / zu blockieren, die die Anforderungsbearbeitung stört.
Ich fügte hinzu:
RewriteRule ^/server-status - [L]
In den Standortblock, und es begann zu arbeiten.
quelle
Wenn Sie die Konfiguration von mod_rewrite und vhost verwenden, müssen Sie einen leeren vhost-Eintrag oben in der vhost-Konfigurationsdatei hinzufügen, z
Dann können Sie über die Server-IP-Adresse darauf zugreifen, z. B. IP-Adresse / Server-Status
quelle
SetHandler server-status
Benötigen Sie nicht auch einen in diesem vhost?