dedlfix: schlauch bei rewriterule backreference

Beitrag lesen

echo $begrüßung;

RewriteRule (.*) index.php?abc=def&url=$0 [L]
  ["url"]=>  string(9) "index.php"
die URL aber ist:
http://localhost/blablabla/httpdocs/asdfasdf/asdfasdf/asdf.cde
Ich dachte mit [L] stopp ich die Ausführung und würde eigentlich den kompletten URL erwischen..?

[L] verhindert die Ausführung weiterer Rules _für_diesem_Durchlauf_. Eine RewriteRule in einer Per-Verzeichnis-Konfigurationsdatei dreht nach dem Umschreiben eine neue Runde (erzeugt einen internen Redirect). Das passiert solange bis kein Umschreiben mehr stattfand. Eine neue Runde bedeutet auch, dass ein bereits erreichtes [L] uninteressant geworden ist. Es wird lediglich neu für die aktuelle Runde berücksichtigt, falls die Bedingung zutrifft.

Beim "Rundendrehen" werden bei ungünstiger Regelnotation auch schon mal mehrere Umschreibungen vorgenommen, bis zufällig keine Regel mehr greift. Dann ist aber eventuell mehr Information verloren gegangen als beabsichtigt. Es kann aber auch zu Endlosschleifen führen, die der Apache aber nach einer konfigurierbaren Anzahl Durchläufen abbricht. Im Allgemeinen verhindert man mehrfache Ausführungen, indem man mittels RewriteCond die Regelausführung unterbindet, wenn die nachgefragte Datei (oder ein Verzeichnis) existiert.

Was konkret abläuft kann man sich im RewriteLog anschauen. Allerdings muss man dazu den Apachen verwalten können. Das RewriteLog lässt sich nicht per Verzeichnis konfigurieren.

RewriteRules beachten außerdem den Querystring nicht. Es gibt nur das Flag QSA, mit dem der Querystring angefügt wird. Das ist vermutlich nicht genau das was du willst. Der Querystring lässt sich aber mit einer RewriteCond ansprechen, und dann gibt es auch eine Backreferenz darauf (mit % beginnend).

echo "$verabschiedung $name";