3 Stimmen

Frontloading mod_rewrite-Regel verursacht doppeltes Laden von index.php

Ich habe an einem Projekt gearbeitet, das einen Frontloader verwendet, um alle Anfragen zu behandeln (Routing domain.com/args/go/here zu Index.php?req=args/go/here), und es hat sehr gut funktioniert... Oder besser gesagt, ich dachte, es hätte funktioniert - ich habe vor kurzem einen neuen Logger hinzugefügt, und um ihn zu testen, habe ich eine Test-Logmeldung in index.php platziert. Diese Nachricht wurde zweimal in meine Logdatei geschrieben, jedes Mal, wenn ich die Seite neu lud, und nach viel Debugging fand ich die Ursache in meiner .htaccess-Datei - aus welchem Grund auch immer lädt sie index.php zweimal für jede Anfrage.

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 habe es auch versucht:

FallbackResource /site/beta/index.php

Das funktioniert nicht (Index.php wird nicht geladen, wenn man z.B. 127.0.0.1/site/beta/admin/controls/ aufruft - aber es funktioniert, wenn man einfach /index.php aufruft) und wird trotzdem zweimal geladen.

Kann mir jemand helfen? Ich habe ein paar Stunden im IRC verbracht, und niemand konnte eine Lösung finden, die funktioniert. (Die beiden oben genannten sind die einzigen, die vorgeschlagen wurden)

6voto

regilero Punkte 28781

Sind Sie ganz sicher, dass es sich um einen mod_rewrite-Bug handelt? Wenn Sie die RewriteLog-Datei mit einem hohen RewriteLogLevel (9) aktivieren, werden dieselben Anfragen dann 2 Mal bearbeitet?

Jedes Mal, wenn ich sehe, dass dieselbe Anfrage 2 Mal ausgeführt wird, denke ich an einen anderen seltsamen Webfehler: Der leere IMG src-Fehler .

Wenn Sie irgendwo in Ihrem HTML eine

<IMG SRC="">

oder in einem der css (schwieriger zu finden) a:

url()

Dann haben Sie es geschafft. Das HTTP-Protokoll schreibt vor, dass eine leere GET-URL (und ein Bild oder url() in css ist eine implizite GET-Anfrage) ein Aufruf der gleichen URL sein MUSS, die auch die ursprüngliche Seite gerendert hat (und es kann auch ein POST sein, wenn Sie Ihre Seite als POST-Anfrage erhalten).

Es gibt nur wenige Gründe, warum ein mod_rewrite 2 Mal auf eine einzige Anfrage reagieren sollte. Prüfen Sie mit Firebug oder LiveHTTP Requests, dass Sie die index.php-Anfrage nicht immer 2 Mal senden. Oder testen Sie Ihren Server mit einer HTTP-Anfrage im Telnet-Modus von Hand, da dabei sicherlich nur eine Anfrage gesendet wird.

1voto

Jim Punkte 13

Das kann auch daran liegen, dass der Browser versucht, die Datei favicon.ico zu laden (unsichtbar, wie es scheint, es sei denn, Sie überprüfen die Apache-Zugriffsprotokolle). Ich hatte das gleiche Problem, bis ich eines in das Root-Verzeichnis meiner Website gelegt habe. Ich weiß, dass das Problem für den ursprünglichen Fragesteller gelöst wurde, ich stelle dies hier für Leute wie mich, die nach einer Antwort auf dieselbe Frage suchen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X