htaccess RewiteRule führt Skript mehrmals aus!
Ben Weichert
- webserver
Hallo Leutz,
ich habe das Problem von meinem Posting
[pref:t=41261&m=225643]
'weiterentwickelt' und stelle die Frage nun neu:
Mein Skript wird pro Browser-Aufruf funf mal ausgeführt. Das merke ich eigentlich nur durch den Output in eine Textdatei. Das komische ist: erst läuft das Skript ganz normal durch, die Browser-Ausgabe ist beendet, die Inhalte der Textdatei sind in richtiger Reihenfolge da, doch dann wird es noch viermal gleichzeitig ausgeführt, was ich an dem Durcheinander in der Textdatei erkenne.
Das Skript lasse ich über eine RewriteRule aufrufen, und selbige sieht so aus:
RewriteEngine on
RewriteRule ^alibi/(.*)$ /verzeichnis/skript.php?parameter=$1
Sodass die URL im Browser so aussieht: http://server.de/alibi/parameter1/parameter2/parameter3/
Das Skript wird dann so vom Server aufgerufen:
http://server.de/verzeichnis/skript.php?parameter=parameter1/parameter2/parameter3/
Herausgefunden habe ich das jetzt, indem ich die _SERVER["UNIQUE_ID"] mit in die Datei schreiben liess, die auf fünf Programmabläufe schliessen lässt.
Warum ist das aber so?
Die Parameterübergabe ist übrigens jedesmal korrekt und jeder ist am richtigen Platz.
Schonmal danke.
-Ben
RewriteEngine on
RewriteRule ^alibi/(.*)$ /verzeichnis/skript.php?parameter=$1
Herausgefunden habe ich das jetzt, indem ich die _SERVER["UNIQUE_ID"] mit in die Datei schreiben liess, die auf fünf Programmabläufe schliessen lässt.
Warum ist das aber so?
Liegt möglicherweise daran, daß die neue URL von mod_rewrite nochmals in den Server eingeschleust wird. Das ist aber nur eine ganz, ganz wage Vermutung, Klärung schafft da schon eher ein Blick in's Protokoll mit höherem RewriteLogLevel.
Sofern Du die Regeln in einer .htaccess benutzt, solltest Du in jedem Falle die eigentlich zwingend erforderliche Angabe RewriteBase nachtragen. Davon unabhängig wäre vielleicht die Angabe "[last]" am Ende von RewriteRule hilfreich.
Gruß,
soenk.e
Hi!
Sofern Du die Regeln in einer .htaccess benutzt, solltest Du in jedem Falle die eigentlich zwingend erforderliche Angabe RewriteBase nachtragen.
Ja? In der Doku(http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteBase) steht:
"When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. But at most websites URLs are NOT directly related to physical filename paths, so this assumption will usually be wrong! There you have to use the RewriteBase directive to specify the correct URL-prefix."
Wie leitest Du daraus einen Zwang ab? Ich habe das noch nie gebraucht.
Grüße
Andreas
"When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. But at most websites URLs are NOT directly related to physical filename paths, so this assumption will usually be wrong! There you have to use the RewriteBase directive to specify the correct URL-prefix."
Wie leitest Du daraus einen Zwang ab?
"[..] so this assumption will usually be wrong! There you have to use the RewriteBase directive [..]"
Also wenn die Aussage, daß eine vom System gemachte "Annahme normalerweise falsch" ist (mit Ausrufungszeichen) und man deshalb "in diesen Fällen RewriteBase benutzen muß" (muß, nicht können, dürfen, möchten, nein, man muß), keinen Zwang beinhalten soll, kann ich es Dir nicht erklären.
IIRC kommt dieser Hinweis in der Anleitung auch noch zweimal vor und ist farblich unterlegt und/oder umrahmt. Sowas hinterlässt bei mir irgendwie den Eindruck, als wenn es da um sehr wichtige Passagen geht.
Ich habe das noch nie gebraucht.
Das möchtest Du doch nicht ernsthaft als Gegenargument einbringen?
Gruß,
soenk.e
PS: Der Fall, in dem das Wurzelverzeichnis des Webservers mit dem des Dateisystems übereinstimmt, kommt in der netzweiten Realität doch hoffentlich nicht vor.