2011-01-07 12 views
3

Ich habe an einem Projekt gearbeitet, das einen Frontloader verwendet, um alle Anfragen zu behandeln (Routing domain.com/args/go/hier zu Index.php? Req = args/gehe/here), und es hat sehr gut funktioniert ... Oder ich sollte sagen, ich dachte es - ich habe vor kurzem einen neuen Logger hinzugefügt, und um es zu testen, legte ich eine Testprotokollmeldung in index.php. Diese Nachricht wurde zweimal in meine Protokolldatei geschrieben, jedes Mal, wenn ich die Seite neu lud, und nach vielem Debugging fand ich den Grund für meine .htaccess-Datei - aus irgendeinem Grund lädt sie index.php zweimal für jede Anfrage.Frontloading mod_rewrite Regel verursacht Index.php zweimal laden

Hier ist meine .htaccess:

RewriteEngine On 
RewriteBase /site/beta/ #I added this after I discovered the bug 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !^index\.php$ #This too. Doesn't work 
RewriteRule ^(.*)$ index.php?args=$1 [L] 

ich auch versucht habe:

FallbackResource /site/beta/index.php 

Was beide nicht funktioniert (Index.php nicht geladen werden einfach nicht, wenn Sie zu gehen versuchen , sagen wir, 127.0.0.1/site/beta/admin/controls/ - aber es tut, wenn Sie einfach zu /index.php gehen, und lädt immer noch zweimal.

Kann mir jemand helfen? Ich verbrachte ein paar Stunden im IRC, und niemand konnte eine Lösung finden, die funktionierte. (Die beiden oben sind die einzigen, die vorgeschlagen werden)

Antwort

6

Sind Sie absolut sicher, dass es ein mod_rewrite Bug ist? Wenn Sie die RewriteLog-Datei mit einem hohen rewriteLogLevel (9) aktivieren, sehen Sie, dass dieselben Anfragen zweimal bearbeitet werden?

Für mich jedes Mal, wenn ich die "gleiche Anfrage zweimal getan" sehe, denke ich an einen anderen seltsamen Web-Bug: Der leere Bug IMG src.

Wenn Sie irgendwo in Ihrem HTML haben eine

<IMG SRC=""> 

oder in einer der css (schwerer zu finden) ein:

url() 

Dann hast du es. Das HTTP-Protokoll diktiert, dass eine leere GET-URL (und ein Bild oder eine URL() in css eine implizite GET-Anfrage) ein Aufruf derselben URL sein muss, die die Originalseite rendert (und es kann auch ein POST sein, wenn Sie erhalten Ihre Seite als POST-Anfrage).

Es gibt wirklich wenig Grund, ein mod_rewrite 2 Mal auf eine einzige Anfrage zu antworten. Überprüfen Sie mit Firebug oder LiveHTTP-Anfragen, dass Sie die index.php-Anfrage nicht immer zweimal senden. Oder testen Sie Ihren Server mit einer Telnet-Modus-HTTP-Anfrage von Hand, da dies sicherlich nur eine Anfrage senden wird.

+0

Sie sind erstaunlich - vielen Dank. Beim Testen meines Header-Konstruktors (HTML-Header) habe ich eine Testzeile hinzugefügt, um eine nicht vorhandene JavaScript-Datei zu laden. – Jon

+0

zum Abschluss, überprüfen Sie auch Favicon Anfragen. Wenn sie zum boatsraper weitergeleitet werden, können seltsame Dinge passieren. – regilero

0

Dies kann auch der Browser sein, der versucht zu laden (unsichtbar scheint es, es sei denn, Sie überprüfen die Apache-Zugriffsprotokolle) favicon.ico. Ich hatte das gleiche Problem, bis ich einen in mein Site-Root-Verzeichnis gesetzt habe. Ich weiß, dass das Problem für den ersten Fragesteller gelöst wurde. Ich stelle das hier für Leute wie mich, die nach einer Antwort auf die gleiche Frage suchen.

Verwandte Themen