Automatische Weiterleitung von einer 404 ErrorPage

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
Weiterleitung mit mod_rewrite

Hallo liebe Macuser

Da die Homepage an der ich gerade arbeite, eine nicht wirklich benutzerfreundliche Ordnerstruktur aufweist, ist es mir ein anliegen trotzdem eine einfache Funktionalität zu gewährleisten. Es geht um folgendes

Bsp:
Es gibt inerhalb der Homepage einen Bereich "Musik". Die deutsche Variante davon befindent sich in domain/de/musik/
Um einen schnellen und einfachen Zugriff auf diesen Bereich zu ermöglichen soll der Benutzer automatisch zu dieser Adresse weitergeleitet werden, wenn er domain/musik eingibt.

Eine umständliche Möglichkeit wäre, für jedes Schlüsselwort einen eigenen Ordner anzulegen mit einer index.htm Datei die dann die Weiterleitung vornimmt. Diese Variante ist jedoch sehr arbeitsinteniv und schwer zu warten.

Wie kann ich mein Vorhaben lösen? Ich hab schon ein bischen mit .htaccess hrumexperimentier aber noch keine sinnvollen Ergebnisse erhalten.

Wer kann helfen?

lg, joedelord
 
Zuletzt bearbeitet:

Difool

Frontend Admin
Registriert
18.03.2004
Beiträge
12.432
h joedelord,

hast du Zugriff auf die error-page?
Wenn ja, leg doch da die direkte Weiterleitung rein.

Gruß Difool
 

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
mein Problem ist, dass ich anscheinend nicht herausfinden kann welcher Seitenaufruf die 404 Seite ausgelöst hat. es wäre möglich durch ein Script die Server log auszuwerten und damit heruszufinden wohin der Benutzer unterwegs war, diese Möglichkeit schein mir aber ein bischen zu rechenintensiv zu sein. Eventuell würden sich auch fehler ergeben wenn zwei benutzer zeitgleich ungültige Adressen aufrufgen.

lg, joedelord
 

Jakob

Aktives Mitglied
Registriert
05.01.2004
Beiträge
1.070
Im .htaccess-File:
Code:
Redirect /musik http://www.domain.de/de/musik/

So weit ich weiß geht das aber nur case sensitive. Für Eingaben wie MuSik müsstest Du mod_rewrite (falls verfügbar) bemühen.
 

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
Vielen Dank für die Hilfe, Problem gelöst und zwar wie folgt;

Ich habe nun in meinm Stammverzeichnis eine .htaccess Datei liegen in dieser mit dem mod_rewrite Modul die Weiterleitungen passieren. Nachdem ich anfangs grobe Probleme damit hatte ist es jetzt für meinen geschmack ganz nett gelöst. und zwar

Code:
# .htaccess im Stammverzeichnis
#
# Aktivierung der RewriteEngine
RewriteEngine on
# setzen der einzelnen Rules, eine pro Zieldatei zB bar.htm
RewriteRule ^([Ss]uchstr.*|[Ss]uschstring2)$ http://www.domain.at/foo/bar.htm [R=301]
und im direkten Unterverzeichnis foo wird die RewriteEngine wieder deaktiviert um Endlosschleifen und damit 500er Fehlermeldungen zu verhindern
Code:
# .htaccess in Stammverzeichnis/foo/
#
# Deaktivierung der RewriteEngine
RewriteEngine off
Erklärung:
Die RewriteRule vergleicht die Suchstrings (als RegEx) mit der angeforderten Url und leitet sie dann entsprechend weiter. Die Notierung von [R=301] bedeutet, dass es sich um einen externen redirect handelt, wobei die nummer dem HTTP Statuscode entspricht (301 = permanent verschoben, gültig sind 300-400)

Link dazu:
modrewrite.de

nochmals Danke, joedelord
 
Zuletzt bearbeitet:
D

dms

Geht aber auch einfacher.

Erstelle das Verzeichnis musik und leite alle Anfragen auf den Ordner /de/musik um. Lege im Ordner /musik eine .htaccess an mit folgendem Inhalt:
Code:
RewriteEngine on
RewriteRule ^(.*)$ /de/musik/$1
Du könntest auch noch eine Bedingung davor setzen und abfragen ob die Datei existiert. So könntest Du spezielle Dateien praktisch "überschreiben". Existiert die Datei, wird sie angezeigt. Existiert sie nicht, wird auf den Ordner /de/musik umgeleitet:
Code:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} ^.*/musik/$
RewriteRule ^(.*)$ /de/musik/$1
 

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
@dms:
Wenn ich das richtig verstehe, dann ist das die Möglichkeit die ich vermeiden wollte. Diese dezentrale Variante war mein erster Zugang (Weiterleitungen mit PHP). Bei Änderungen der Seite müsste man aber auch in jedem ordner die einzelnen .htaccess files ändern, was auf dauer unübersichtlich wird. deshalb habe ich für die oben beschribene zetralisierte Variante entschieden.

lg, joedelord
 
D

dms

Ok, das Gegenargument gegen meine Variante verstehe ich, jedoch sehe ich kein Pro-Argument für Deine Variante.

RewriteRule ^([Ss]uchstr.*|[Ss]uschstring2)$ http://www.domain.at/foo/bar.htm [R=301]

Vielleicht stehe ich auf dem Schlauch, aber so wie ich das jetzt verstehe musst Du bei einer Änderung der Seite sowohl alle Suchstrings (das dürften die kompletten Pfade zu jeder einzelnen Datei sein, oder?) anpassen sowie die Ziel-URI.
 

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
Nach meinen überlegungen, sollte man Änderungen innerhalb von ca 2 minuten durchführen können. Ich poste hier mal den Inhalt der original .htaccess Datei;

Code:
# oskar_aichinger root

ErrorDocument 404 http://www.oskaraichinger.at/error/404.xhtml

# mod_rewrite
RewriteEngine on

# Biografie, index.htm (Kurzbiografie)
RewriteRule ^([Bb]iografie|[Bb]iographie|[Bb]io|[Aa]ichinger|[Oo]ssi|[Oo]skar)$ http://www.oskaraichinger.at/de/biografie/ [R=301]
# Biografie, fotos.htm
RewriteRule ^([Ff]oto.*|[Bb]ild.*)$ http://www.oskaraichinger.at/de/biografie/fotos.htm [R=301]
# Biografie, links.htm
RewriteRule ^([Ll]ink.*)$ http://www.oskaraichinger.at/de/biografie/links.htm [R=301]
# Biografie, kontakt.htm
RewriteRule ^([Kk]ontakt.*)$ http://www.oskaraichinger.at/de/biografie/kontakt.htm [R=301]
# Biografie, presse.htm
RewriteRule ^([Pp]resse|[Mm]edi.*)$ http://www.oskaraichinger.at/de/biografie/presse.htm [R=301]

# Musik, index.htm (Werkverzeichnis)
RewriteRule ^([Mm]usik|[Ww]erk.*)$ http://www.oskaraichinger.at/de/musik/ [R=301]
# Musik, diskographie.htm
RewriteRule ^([Dd]isko.*)$ http://www.oskaraichinger.at/de/musik/diskographie.htm [R=301]

# Aktuelles, index.htm (Aktuelle Bands & Projekte - ?berblick)
RewriteRule ^([Bb]and.*|[Pp]rojekt.*|[Aa]ktuell.*)$ http://www.oskaraichinger.at/de/aktuelles/ [R=301]
# Aktuelles, infos.htm
# foo
# Aktuelles, termine.htm
RewriteRule ^([Tt]ermin.*|[Kk]onzert.*|[Aa]uftritt.*)$ http://www.oskaraichinger.at/de/aktuelles/termine.htm [R=301]
# Aktuelles, neue_cds.htm 
RewriteRule ^([Cc]d.*|[Pp]latte.*|[Ll][Pp])$ http://www.oskaraichinger.at/de/aktuelles/neue_cds.htm [R=301]

Erklärung:
zu jeder vorhandenen Seite gibt es eine RewriteRule. In dieser Rule sind alle Stichworte beschrieben, bei denen automatisch zur gewollten Seite weitergeleitet wird.
z.B: bei gibt man www.oskaraichinger.at/konzerte ein wird man automatisch auf www.oskaraichinger.at/de/aktuelles/termine.htm weitergeleitet. also fast Usability pur!

Ich hoffe, dass dieses Beispiel die Sache ein bischen verdeutlicht.
Ich bin jederzeit für Tips und Hinweise offen.

lg, joedelord
 
D

dms

Ah, dann habe ich die Eingansfrage wohl falsch verstanden. Mit den ganzen Shortcuts macht das so natürlich Sinn.
 

joedelord

Mitglied
Thread Starter
Registriert
12.12.2002
Beiträge
492
Das mit der Groß und kleinSchreibung ist bei mir so eine Sache; Bei meinen jetzigen Versuchen resultierte [NC] immer in einem internal error. Die jetzige Lösung ist deshalb auch nur eine vorübergehende.

@dms: Ich weiß die Eingangsfrage ist ein bischen konfus, und unpassend

lg, joedelord

edit: Ich sehe gerade, dass man NC nur in der Cond verwenden kann. das könnte mein Problem lösen.
 
Zuletzt bearbeitet:
Oben