Weiterleitung auf untergeordnetes Verzeichnis

Alles, was den Apache betrifft, kann hier besprochen werden.

Weiterleitung auf untergeordnetes Verzeichnis

Postby ollo » 07. July 2005 14:37

Hallöchen,

ich hab da ein (vermutlich völlig simples) httpd.conf Problem, zu dem ich aber keine richtige Lösung finde.

Ich möchte beim Aufruf von http://www.foobar.net auf http://www.foobar.net/de weiterleiten, da die deutsche Seite vorerst die Startseite ist. Später wird noch http://www.foobar.net/en dazukommen (und die Weiterleitung dementsprechend angepasst), aus diesem Grund will ich unter http://www.foobar.net KEINEN Content ablegen, nur die Unterverzeichnisse sollen ansprechbar sein.

Die Lösung von Xampp selbst (redirect in leerer HTML-Datei) ist ja nicht wirklich sinnvoll.

Das Problem ist, dass man mit 'redirect temp / http://www.foobar.net/de' eine unendliche Weiterleitung provoziert.

Es muss doch möglich sein, NUR den Aufruf des web-root weiterzuleiten, so dass die Weiterleitung ansonsten ignoriert wird, sieht mal doch alle Nase lang mal...

Irgendwelche Ideen?
ollo
 
Posts: 85
Joined: 11. November 2004 12:29

Postby deepsurfer » 07. July 2005 15:38

Entweder in foobar/en eine index.html setzen mit einer
null-sekunden-weiterleitung META Anweisung

oder es gibt da einige Scripte in PHP/CGI etc.
die zuerst die Brwosersprache auslesen und dementsprechend in ein definiertes Verzeichnis weiterleiten.
(nachteil, du müsstest zumindest in /en eine BLANKpage einbauen, sofern dein Projekt Öffentlich zu erreichen ist.
Last edited by deepsurfer on 07. July 2005 19:27, edited 2 times in total.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby ollo » 07. July 2005 16:22

deepsurfer wrote:entweder in foobar/en eine index.html setzen mit null-sekunden-weiterleitung META Anweisung oder es gibt da einige Scripte PHP/CGI etc. die zuerst die Brwosersprache auslesen und dementsprechend in ein definiertes Verzeichnis weiterleiten.
(nachteil, du müsstest zumindest in /en eine BLANKpage einbauen, sofern dein Projekt Öffentlich zu erreichen ist.


1. kommt man ja nicht automatisch in das /en verzeichnis, da man ja normalerweise nur die domain eingibt (das ist ja gerade das problem :)

2. ist meta-refresh genau die Lösung, die ich nicht benutzen möchte (siehe oben). Am besten wäre es nämlich, wenn der Aufruf von irgendeiner Datei aus dem root (also www.foobar.net/index.html, www.foobar.net/gibts_net.html oder auch nur www.foobar.net) eine korrekte Weiterleitung zur Folge hat.

Die Sache mit der Browsersprache wäre eigentlich interessant, das wäre dann quasi ein Bonus, weshalp meta-refresh wieder eine Option werden könnte. Aber andererseits gibt es ja schon beide domains (foobar.de und foobar.net), wodurch die Unterscheidung der Sprache eigentlich schon da ist.
Sobald auch englischer Content online kommt, wird es dann eh in der Navigation eine Umschaltmöglichkeit geben.

Der Punkt ist, dass es doch möglich sein muss, so eine Weiterleitung elegant Apache-seitig zu regeln. Das gleiche Problem besteht ja auch, wenn man aus irgendeinem Grund nicht index.html als Startseite haben will, sondern, was weiß ich, hallo.html (und eben nicht hallo.html in die Liste der indexdateien aufnehmen möchte). Ich kann mir nicht vorstellen, dass sowas nicht möglich ist, und wenn es auch eine frickelige mod_rewrite-Geschichte ist...

trotzdem danke...
ollo
 
Posts: 85
Joined: 11. November 2004 12:29

Postby Wiedmann » 07. July 2005 17:33

Code: Select all
Ich möchte beim Aufruf von http://www.foobar.net auf http://www.foobar.net/de weiterleiten,

Code: Select all
RewriteEngine on
RewriteCond    %{HTTP_HOST}    ^www\.foobar\.net    [NC]
RewriteRule    ^/$    www.foobar.net/de/    [R]


Code: Select all
2. ist meta-refresh genau die Lösung, die ich nicht benutzen möchte (siehe oben). Am besten wäre es nämlich, wenn der Aufruf von irgendeiner Datei aus dem root (also www.foobar.net/index.html, www.foobar.net/gibts_net.html oder auch nur www.foobar.net) eine korrekte Weiterleitung zur Folge hat.

Was ist hier eine korrekte Weiterleitung?

Das gleiche Problem besteht ja auch, wenn man aus irgendeinem Grund nicht index.html als Startseite haben will, sondern, was weiß ich, hallo.html (und eben nicht hallo.html in die Liste der indexdateien aufnehmen möchte)

Welchen plausieblen Grund sollte es geben, hier nicht den DirectoryIndex anzupassen. Da nimmt doch kein Mensch mod_rewrite dafür... (ausser du willst es passthrough haben)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby ollo » 07. July 2005 21:30

Wiedmann wrote:
Ich möchte beim Aufruf von http://www.foobar.net auf http://www.foobar.net/de weiterleiten,

Code: Select all
RewriteEngine on
RewriteCond    %{HTTP_HOST}    ^www\.foobar\.net    [NC]
RewriteRule    ^/$    www.foobar.net/de/    [R]


Nicht ganz korrekt, aber der richtige Ansatz... danke vielmals!

So langsam kapiere ich mod_rewrite doch. Eine Frage ist allerdings immer noch offen: auf was genau bezieht sich der Pattern der RewriteRule, auf den gesamten Request, die volle URL mit ServerName oder nur auf den internen Teil der URL, also bspw. nur /index.php beim Aufruf von www.foobar.net/index.html? Ich vermute Letzteres...

Naja, meine Rules sehen jetzt so aus:
Code: Select all
   RewriteEngine on
   RewriteCond    %{HTTP_HOST}%{REQUEST_URI}    ^www\.foobar\.net    [NC]
   RewriteRule    ^/$    /de/    [R]
   RewriteCond    %{HTTP_HOST}%{REQUEST_URI}    ^www\.foobar\.net/[^/]+$    [NC]
   RewriteRule    ^.*$    /de/    [R]


Das fängt dann auch Requests auf beliebige Dateien im Root-Verzeichnis ab und leitet sie weiter.

2. ist meta-refresh genau die Lösung, die ich nicht benutzen möchte (siehe oben). Am besten wäre es nämlich, wenn der Aufruf von irgendeiner Datei aus dem root (also www.foobar.net/index.html, www.foobar.net/gibts_net.html oder auch nur www.foobar.net) eine korrekte Weiterleitung zur Folge hat.

Was ist hier eine korrekte Weiterleitung?


Eine die auf den gewünschten Ort weiterleitet? :?

Der Sinn dabei ist ja, dass das Rootverzeichnis als solches in diesem Fall nicht existiert, bzw. keinen Inhalt hat. Sinnvoll für den Besucher sind nur die Unterverzeichnisse für die verschiedenen Sprachen, also sollte das Rootverzeichnis auch nicht ansprechbar sein.

Das gleiche Problem besteht ja auch, wenn man aus irgendeinem Grund nicht index.html als Startseite haben will, sondern, was weiß ich, hallo.html (und eben nicht hallo.html in die Liste der indexdateien aufnehmen möchte)

Welchen plausieblen Grund sollte es geben, hier nicht den DirectoryIndex anzupassen. Da nimmt doch kein Mensch mod_rewrite dafür... (ausser du willst es passthrough haben)


Ja, hast recht, das war ein blödes Beispiel... Ich dachte ja auch dass man um mod_rewrite herumkommt und es eine wirklich einfache Lösung gibt.

Der plausible Grund liegt darin, dass das anpassen des DirectoryIndex nicht der Semantik entspricht. Man will ja nur in einem(!) Verzeichnis eine Weiterleitung auf eine bestimmte(!) Ressource hervorrufen. Selbstverständlich kann man dann auch den DirectoryIndex nur für dieses eine Verzeichnis ändern, aber sobald's dann etwas komplexer wird, reicht das schon nicht mehr.

Siehe mein Problem oder diverse Dokus zu mod_rewrite, Stichwort browser/tageszeitspezifische Startseiten...

Was meintest du mit passthrough? Dass es von anderen Rules weiterverarbeitet werden kann?
ollo
 
Posts: 85
Joined: 11. November 2004 12:29


Return to Apache

Who is online

Users browsing this forum: No registered users and 4 guests