%{ENV:REDIRECT_STATUS} ist leer (.htaccess)

Alles, was den Apache betrifft, kann hier besprochen werden.

%{ENV:REDIRECT_STATUS} ist leer (.htaccess)

Postby Andiministrator » 25. March 2014 18:02

Ich versuche mich gerade an eigenen Fehlerseiten für verschiedene Response Codes. Soweit funktioniert das auch mit der folgenden (minimalen) .htaccess:
Code: Select all
RewriteEngine On
RewriteBase /

ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 402 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 405 /error.php
...


Mein Problem ist, dass für das CMS folgender Code in der .htaccess verwendet wird:
Code: Select all
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA]

Dadurch wird alles an die index.php des CMS umgeleitet und die ErrorDocument-Anweisungen verlieren ihre Wirkung.

Nun war meine Idee, vor der obigen Anweisung alles umzuleiten, was nicht den Response-Code 200 liefert (später wollte ich das auf >=400 setzen). Dazu gibt es ja die Variable %{ENV:REDIRECT_STATUS}. Hier der Test-Code:
Code: Select all
RewriteCond %{ENV:REDIRECT_STATUS} !200
RewriteRule ^(.*)$ /error.php?e=$1 [QSA,L]


Leider funktioniert das so nicht, die Variable %{ENV:REDIRECT_STATUS} scheint bei mir immer leer zu sein, zumindest bei den getesteten 200 und 404 Codes.

Gibt es eine Alternative für mich?
Arbeitet bei conversearch GmbH: conversearch.de (Webseiten-Analyse und -Monitoring)
Bloggt bei Andiministrator.de
User avatar
Andiministrator
 
Posts: 1
Joined: 25. March 2014 17:52
Location: Plauen
Operating System: Windows 8.1

Re: %{ENV:REDIRECT_STATUS} ist leer (.htaccess)

Postby Nobbie » 26. March 2014 16:19

Ich würde die Errorseiten einfach in ein benachbartes Verzeichnis legen. Das Problem entsteht ja nur deswegen, weil die Errorscripts und die Anwendung beide auf höchster Ebene des DocumentRoots stehen.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: %{ENV:REDIRECT_STATUS} ist leer (.htaccess)

Postby monra » 09. April 2014 14:28

Hallo Andiministrator,
bisschen spät, aber ich geb auch nochmal meine Sicht der Dinge hinzu.

In deiner RewriteRule wird alles auf index.php umgeleitet. Das heisst, es wird nie einen Fehler geben, ausser wenn diese index.php nicht existiert. Somit wirst du auch nie einen redirect status =! 200 bekommen. Das heisst wiederrum, dass deine Errorseiten nie greifen.

Die Condition ist aber auch sowieso unnötig, da deine Errorseiten greifen würden, wenn es tatsächlich einen Fehler gäbe. Sie sind durch die -f Bedingung von dem Redirect ausgenommen.
Um zu testen, ob meine Annahme richtig ist, musst du nur mal die index.php umbenennen, so dass sie nicht mehr gefunden wird.

Hoffe, ich konnte weiterhelfen
monra
monra
 
Posts: 5
Joined: 06. January 2009 13:51


Return to Apache

Who is online

Users browsing this forum: No registered users and 24 guests