.htaccess - Mehrfachaufrufe durch Transitivität vermeiden

Sturmrider

Erfahrenes Mitglied
Hallo zusammen,

Ich habe einige RewriteRule's geschrieben, welche auch soweit funktionieren... - dachte ich zumindest. Nun musste ich feststellen, dass meine Seiten vom Server scheinbar mehrfach aufgerufen werden, auch wenn man es im Browser nur einmal sieht. Meine MySQL UPDATE-Querys wurden für jede RewriteRule einmal aufgerufen. Ich denke es liegt daran, dass ich in meinen RewriteRule's nicht beachtet habe, dass sie transitiv von einander abhängig sind und sich nicht gegenseitig überschreiben. Meine Frage ist nun, wie kann ich das vermeiden?

Hier ein Auszug aus meinen Regeln (die Kommentare sollten etwa erklären was die Regeln machen sollen. Trotzdem, bei Fragen, einfach fragen ;) ):

Code:
# Ordner blog, galerie, login, logout als ID an "index.php?" anhängen
RewriteRule ^(galerie|blog|logout|login)/{0,1}$ index.php?$1

# folgenden Ordner nach galerie/ [album], an "index.php?album=" anhängen
RewriteRule ^galerie/([^/]+)/{0,1}$ index.php?album=$1

# den auf [album]/ folgenden Bilddateinamen zerlegen: [id]-[bildname.Endung]
# [id] an "index.php?foto=" weiterreichen und
# [bildname.Endung] an "&fid=" 
# [album] kann optional mit "&album=" als letzte ID in der URL angehängt werden
RewriteRule ^galerie/([^/]+)/([0-9]+)-([^/]+\.(jpg|jpeg|png|gif))$ index.php?foto=$2&fid=$3

Wenn ich nun z.B. einen Album-Namen an die URL-Adresse "galerie/" anhänge, treffen die 2. und 3. RewriteRule auch teilweise zu und irgendwie landen alle 3 Treffer bei "index.php?foto", so dass dort 3Mal ein UPDATE-Query ausgelöst wird. Die richtige Seite wird im Browser aber aufgerufen. (ich sehe nur anhand der Datenbank, dass die Seite mehrfach von mir aufgerufen wurde) Wie kann ich das vermeiden?

Unsicher bin ich mir auch in folgendem Abschnitt. Auch hier sind im Falle der 2. Regel beide Regeln erfüllt. Ich habe es zwar noch nicht getestet, aber auch hier müsste das selbe Problem, wie oben auftauchen. Wie kann ich das umgehen?
Code:
# wenn folgender Ordner nach blog/[kategorie] KEINE reine Zahlenfolge ist,
# an "index.php?blog&catname=" anhängen
RewriteRule ^blog/([^/]+)/{0,1}$ index.php?blog&catname=$1

# wenn folgender Ordner nach blog/[seite] eine reine Zahlenfolge ist,
# an "index.php?blog&seite=" anhängen
RewriteRule ^blog/([0-9]+)/{0,1}$ index.php?blog&seite=$1
 
Zuletzt bearbeitet:
Ups, habe mich im Titel verschrieben... es sollte natürlich Transitivität heißen.
Des Problems Lösung lautet [L] am Ende jeder RewriteRule. Damit ist die RewriteRule hier zu Ende und es können keine RewriteRules miteinander verkettet werden. Ich habe mich noch einmal durch die Apache-Doku gequält und dabei fest gestellt, dass ich die Lösung eigentlich die ganze Zeit über hatte, aber der Firefox scheinbar so seine Problemchen hat.
(Ich muss manchmal nach dem ändern der rewriteRules den Server neustarten... vorher tut sich im Firefox nichts mehr, auch Browser-Cache leeren etc. hilft nicht. Im Safari habe ich diese Probleme nicht feststellen können)

Damit ist meine Frage wohl beantwortet. (auch wenn ich nicht glaube, dass hier niemand eine Antwort gewusst hätte)
 
Zurück