Bob: Komisches Verhalten von RewriteRule

Beitrag lesen

(#1): RewriteRule ^([^/\.]*)/$ hl.php?bereich=$1

um über '/grundlagen' auf /hl.php?bereich=grundlagen zuzugreifen.

Das klappt, '/grundlagen' wird in der Adresszeile allerdings automatisch zu '/grundlagen/'.

Ein Verzeichnis grundlagen/ existiert auch physisch auf dem Server? Dann bist du auf einen (bereits bekannten) Bug gestoßen. Nach dem fixup-hook von mod_rewrite und dem internal redirect processing, läuft der fixup-hook von mod_dir des ursprünglichen Requests. Er läuft folglich noch mit einem eigentlich nicjht mehr korrekten r->uri-Wert, was nunmehr zu dem unterwünschten Redirect durch mod_dir führt.

Du musst dir das (vereinfacht) so vorstellen:

mod_rewrite fixup orig. request
  internal redirect
     mod_rewrite fixup internal redirect
     mod_dir fixup internal redirect
  ende internal redirect
mod_dir fixup  orig. request <-- hier entsteht das Problem
content handler

Also nachdem das Processing des internal redirects abgeschlossen ist, greift erst der fixup-hook des urspr. requests von mod_dir. Das führt zu dem o.a. Fehlverhalten. Normalerweise müssten nach dem Einleiten des internal redirects durch mod_rewrite alle weiteren fixup-hooks des urpsr. requests gecanceled werden.