Hallo Forum,
ich stand gestern vor folgender Aufgabe:
Ich will die Verzeichnisstruktur in einem DocumentRoot dahngehend ändern, dass index.php 'eine Ebene tiefer rutscht'. Das Dokument 'index.php' liegt nicht mehr unter '/' sondern unter '/public/' und ist insofern zukünftig über a) http://www.example.org/ sondern unter b) http://www.example.org public/ erreichbar.
Damit der Aufruf a) nach wie vor funktioniert, gibt es die einfache Möglichkeit, mt mod_rewrite folgende Regel zu definieren:
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1
... und damit funktionieren sowohl a) als auch b). Nun wollte ich aber zusätzlich erreichen, dass bei Eingabe von b) per redirect nach a) umgeleitet wird, damit in jedem Fall a) in der Adresszeile des Browsers steht. Total naheleigend war der Gedanke, meine .htaccess wie folgt zu erweitern:
RewriteRule ^public/(.*)$ /$1 [R]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1
... was dazu führte, dass "die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.", was ich nicht verstanden habe. Danach habe ich dann noch die Umkehrung versucht, was (meinem Verständnis nach) auch hääte fnktionieren müssen:
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L]
RewriteRule ^public/(.*)$ /$1 [R]
... aber zum gleichen Ergebnis führte. Nach langer Recherche und ewigem Trial&Error, habe ich das ganze dann wie folgt hinbekommen:
RewriteCond %{THE_REQUEST} /public/
RewriteRule ^public/(.*)$ /$1 [R]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1
... aber leider nicht verstanden, warum die Versuche vorher nicht funktioniert haben. Kann mir das jemand erklären?
danke für Tipps und
beste gruesse,
heinetz