.htaccess verursacht hohe Serverauslastung
Hal
- webserver
Hallo,
dann versuche ich es hier noch einmal. Zur suchmaschinenfreundlichen Linkgestaltung setze ich im Rootverzeichnis eine .htaccess-Datei mit folgendem Inhalt ein:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Nicht vorhandene URLs sollen damit an die index.php im Rootverzeichnis übergeben werden. Das klappt auch auf meinem lokalen Apache-Server auf dem Laptop hervorragend.
Wenn ich das Ganze hochlade, schnellt jedoch bereits nach kurzer Zeit Server-Load und CPU-Auslastung in die Höhe und die Seite wird online unbenutzbar (Error 500). Lösche ich die .htaccess, funktioniert alles wieder wunderbar. Das hört sich für mich verdächtig nach Endlosschleife an, ich frag mir nur, wo.
Noch zur Info, auf dem Online-Server befindet sich parallel dazu noch die alte Version der Homepage, die noch ein paar Tage bis zur endgültigen Umstellung drauf bleiben soll. Im Root-Verzeichnis befindet sich daher von der alten Seite noch eine index.html, die eine Weiterleitung in ein Unterverzeichnis enthält, wo sich die eigentliche Seite (in Flash befindet).
Ich hätte gedacht, dass sich beide Seiten nicht in die Quere kommen. Hat jemand eine Idee, woher die außergewöhnlich hohe Belastung bei Einsatz der .htaccess kommen könnte?
Moin Moin!
dann versuche ich es hier noch einmal.
Wo hast Du es vorher versucht? Hier in einem anderen Thread (welchem)? In einem anderen Forum (URL)?
Alexander
Wo hast Du es vorher versucht? Hier in einem anderen Thread (welchem)? In einem anderen Forum (URL)?
Hier natürlich nicht (sonst würde ich noch einen Thread aufmachen). Ich hatte heute mal auf Traum-Projekt gefragt (http://www.traum-projekt.com/forum/35-server-and-provider/), da aber keine Antwort erhalten.
Hi,
Das hört sich für mich verdächtig nach Endlosschleife an, ich frag mir nur, wo.
Welche Rechte hast du auf dem Server?
Wenn möglich, Access- und Error-Log anschauen, und Rewrite-Log einschalten.
Noch zur Info, auf dem Online-Server befindet sich parallel dazu noch die alte Version der Homepage, die noch ein paar Tage bis zur endgültigen Umstellung drauf bleiben soll. Im Root-Verzeichnis befindet sich daher von der alten Seite noch eine index.html, die eine Weiterleitung in ein Unterverzeichnis enthält, wo sich die eigentliche Seite (in Flash befindet).
Ich hätte gedacht, dass sich beide Seiten nicht in die Quere kommen.
Deine RewriteRule gilt auch für Unterverzeichnisse (sofern du dagegen nichts unternommen hast, was du uns nicht gezeigt hast).
MfG ChrisB
Hallo,
Welche Rechte hast du auf dem Server?
Wenn möglich, Access- und Error-Log anschauen, und Rewrite-Log einschalten.
Ist ein gemanagter Server von 1&1. Ich habe da Zugriff auf die Logs für Server-Load, MEM- und CPU-Auslastung, etc., das war's. Ich wäre auch nicht allein in der Lage, einen Server einzurichten und zu verwalten.
Deine RewriteRule gilt auch für Unterverzeichnisse (sofern du dagegen nichts unternommen hast, was du uns nicht gezeigt hast).
Nein, was ich gemacht habe, steht alles da. Natürlich gilt die auch für Unterverzeichnisse, ich dachte aber, dass durch die RewriteCond's nur dann die Regel in Kraft tritt, wenn versucht wird, auf eine Datei oder Verzeichnis zuzugreifen, was nicht existiert. Sprich, wenn die alte Seite per index.html aufgerufen und dann einfach auf eine existierende Datei weitergeleitet wird, in der sich die Flash-Seite befindet (von der aus dann auch nicht mehr weiterverlinkt wird), dachte ich, da könnte nix passieren.
Zusatz:
Mit ErrorDocument 404 /index.php ist die Situation genauso.
Hi,
Natürlich gilt die auch für Unterverzeichnisse, ich dachte aber, dass durch die RewriteCond's nur dann die Regel in Kraft tritt, wenn versucht wird, auf eine Datei oder Verzeichnis zuzugreifen, was nicht existiert.
Du hast in der RewriteCond die Umgebungsvariable REQUEST_FILENAME verwendet, definiert als
"The full local filesystem path to the file or script matching the request."
Ich bin mir gerade nicht sicher, ob ich das "matching the request" hier richtig interpretiere - aber wenn diese Variable den physischen Pfad erhält, der den Request matched, dann ist das zur Überprüfung eher ungeeignet (weil doppelt gemoppelt).
Überlicherweise benutzt man REQUEST_URI, um zu schauen, ob es zu diesem ein existentes Verzeichnis/Datei gibt.
Sprich, wenn die alte Seite per index.html aufgerufen und dann einfach auf eine existierende Datei weitergeleitet wird, in der sich die Flash-Seite befindet (von der aus dann auch nicht mehr weiterverlinkt wird), dachte ich, da könnte nix passieren.
Stimmt, sollte eigentlich - aber performanter wird das ganze dadurch natürlich nicht gerade, wenn für absolut jede Ressource der "alten" Seite erst mal diese Überprüfung durchgeführt werden muss. Die RewriteRule wird nämlich immer zuerst überprüft, also ob der reguläre Ausdruck zutrifft - und dann erst geschaut, ob die RewriteConds auch die Anwendung dieser Regel erlauben.
MfG ChrisB