Mod Rewrite -> Verzeichnis umleiten
Ulf
- webserver
0 Freddi0 Johannes Zeller0 Ulf
1 Johannes Zeller0 Ulf
Hallo liebe SelfHTML-Community!
Ich plage mich seit 2 Tagen mit einem Mod Rewrite - Problem herum,
dass mir zuerst ganz simpel erschien, ich jedoch einfach nicht zu lösen vermag.
Ich besitze Webspace bei All-Inkl.com, der virtuell auf das
Verzeichnis /www/htdocs/meinAccName/ verweist.
Nun möchte ich dass bei Aufruf der URL
http://www.meinedomain.de/irgendwas.html
auf
/www/htdocs/meinAccName/seitenverzeichnis/irgendwas.html
verwiesen wird.
irgendwas.html steht für eine beliebige Datei oder
ein beliebiges Verzeichnis.
Wenn jedoch
http://www.meinedomain.de/forum
aufgerufen wird, soll
/www/htdocs/meinAccName/forum
aufgerufen werden.
Ich habe verschiedene Möglichkeiten versucht: die .htaccess-Datei
in /www/htdocs/meinAccName/ zu stecken; die Domain auf
/www/htdocs/meinAccName/seitenverzeichnis umzuleiten und
dort eine .htaccess-Datei zu erstellen - nichts hat so funktioniert
wie ich es wollte.
Bei letzterer Methode sah meine .htaccess-Datei so aus:
(www.meinedomain.de verweist auf /www/htdocs/meinAccName/seitenverzeichnis/;
bei Aufruf
von meinedomain.de/forum soll auf /www/htdocs/meinAccName/forum)
umgeleitet werden... :
RewriteEngine On
RewriteRule ^(.*)forum/(.*)$ /www/htdocs/meinAccname/forum/$2
Diese Datei führt zu einem Internal Server Error...
Für Tipps und Hilfe wäre ich sehr dankbar!
Hallo liebe SelfHTML-Community!
Diese Thema wurde kürzlich ausführlich behandelt.
Gruß
Freddi
Hallo Freddi,
Hallo liebe SelfHTML-Community!
Diese Thema wurde kürzlich ausführlich behandelt.
Eine Diskussion über die SELFHTML-Community? Ich kann mich an nichts erinnern. Vielleicht wärst du so freundlich, mich auf den entsprechenden Thread hinzuweisen.
Schöne Grüße,
Johannes
Hallo Freddi,
Hallo liebe SelfHTML-Community!
Diese Thema wurde kürzlich ausführlich behandelt.
Ich habe die Antwort auf meine Frage weder im SelfHTML-Archiv
noch auf modrewrite.de finden können. :(
Umleitungen an ein Skript, wie sie hier häufig diskutiert wurden, klappen bei mir z.B. bereits wunderbar. Auch Verzeichnis-Umleitungen
in anderer Konstellation habe ich schon zu Stande gebracht; nicht
jedoch die Lösung des von mir geschilderten Problems.
Sollte ich nun dennoch den mir weiterhelfenden Thread
übersehen haben, wäre ich dankbar für einen Hinweis.
Hallo Ulf,
RewriteEngine On
RewriteRule ^(.*)forum/(.*)$ /www/htdocs/meinAccname/forum/$2
Guck mal in dein Error-Log, da müsste ein Meldung der Art
»mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.«
drin stehen. Das wirkt auf den ersten Blick sehr komisch, deswegen muss man sich klar machen, was deine RewriteRule überhaupt bewirkt:
Mit ^(.*)forum/(.*)$ erreichst du alle URLs, die die Zeichenkette "forum/" enthalten. Dieses wird dann umgeschrieben auf eine URL wie http://www.example.org/www/htdocs/meinAccname/forum/... Hier siehst du schon, dass die Zielangabe für den Rewrite nicht als Pfad im Dateisystem angegeben werden darf.
Da der Webserver, die umgeschriebene URL (http://www.example.org/www/htdocs/meinAccname/forum/...) nicht anders behandelt, als wenn die direkt eingegeben wäre, überprüft er wieder, ob die RewriteRule darauf zu trifft. Das ist der Fall, denn die URL enthält ja die Zeichenkette "forum/". Das geht theoretisch endlos so weiter, aber der Apache hat für solche Fälle eine Sicherung eingebaut, die nach einer bestimmten Anzahl von Rewrites, den Vorgang abbricht.
Wenn du Zugriff auf die httpd.conf bzw. deine Virtual-Host definition hättest, könntest du mod_alias verwenden:
~~~apache
DocumentRoot "/www/htdocs/meinAccname/seitenverzeichnis/"
Alias /forum /www/htdocs/meinAccname/forum/
Da ich vermute, dass dies nicht der Fall ist, musst du wohl doch bei mod\_rewrite bleiben.
~~~apache
RewriteEngine On
# Kein Rewrite, wenn der REQUEST_URI mit /forum beginnt
RewriteCond %{REQUEST_URI} !^/forum
# Kein Rewrite, wenn der REQUEST_URI mit /seitenverzeichnis beginnt.
# Notwendig, damit der Rewrite nur einmal durchgeführt wird
RewriteCond %{REQUEST_URI} !^/seitenverzeichnis
# Ansonsten Alles auf /seitenverzeichnis/$1 umschreiben.
RewriteRule (.*) /seitenverzeichnis/$1
Die Umgebungsvariable REQUEST_URI enthält den Teil der URL, ohne Protokoll- und Host-Angabe, d.h. bei http://www.example.org/foo/bar den String "/foo/bar".
Schöne Grüße,
Johannes
Vielen Dank für Deine Antwort und die ausführliche Erklärung! Das war genau die Lösung, die ich gesucht hatte.
Gruß
Ulf