Seite 1 von 1

Frage zum Automatischen Weiterleiten

Verfasst: 30.01.2009, 10:29
von devolo01
Hi @all

ich habe vor kurzen meine Seite com-lan-hilfe.de etwas Umstrukturiert. Bis vor 2 Wochen hatte ich auf dieser Seite einen Technischen Ratgeber. Dieser ist aber aus meinen Zeiten wo ich keine Ahnung von allem usw hatte Entstanden. Was aber auch nicht heißt das ich jetz der Profie währe.

Nun zu meinen Problem ich habe mein komplettes altes Projekt in das Verzeichniss /tech verschoben.

Nun ist es aber so das ich auf bestimmte Seite doch einige Backlinks habe die jetzt selbstverständlich nicht mehr erreichbahr sind.

Als Beispiel. Die Seite

https://www.com-lan-hilfe.de/isp/isp_01.html

liegt jetzt ist jetzt nur noch über https://www.com-lan-hilfe.de/tech/isp/isp_01.html zu erreichen.

Meine Frage ist jetzt dahingehend, gibt es eine Möglichkeit mittels httacces oder Tools etc. Anfragen automatisch auf das neue Verzeichniss umzuleiten?
Bin wie schon erwähnt nicht wirklich der Profie was PhP und httaccess angeht.

Währe euch sehr Dankbar für Tipps, Totorials, Seiten oder auch den Passenden suchbegriffen nach denen ich Suchen könnte.

Ich Danke euch schon einmal.

Gruß Christian

Verfasst:
von

Re: Frage zum Automatischen Weiterleiten

Verfasst: 30.01.2009, 11:35
von Mork vom Ork
devolo01 hat geschrieben:Nun zu meinen Problem ich habe mein komplettes altes Projekt in das Verzeichniss /tech verschoben.

Nun ist es aber so das ich auf bestimmte Seite doch einige Backlinks habe die jetzt selbstverständlich nicht mehr erreichbahr sind.
Falls es sich nur um eine Handvoll Seiten handelt, benutze Redirect. Welche Seiten betroffen sind, siehst du ja über kurz oder lang an den Meldungen im Fehlerprotokoll deines Servers (das du ja sicher täglich prüfst).

Falls hingegen Verweise auf Massen von Seiten existieren, verwende folgende Zeilen in /.htaccess:

Code: Alles auswählen

# URLs, die auch im neuen Bereich existieren, von der Umleitung ausschließen
RewriteCond %{REQUEST_URI} !=/

# Prüfen, ob URL im Bereich der alten Seiten als Datei oder Verzeichnis existiert
RewriteCond %{DOCUMENT_ROOT}/tech%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}/tech%{REQUEST_URI} -d

# Falls ja, in den alten Bereich umleiten
RewriteRule (.*) tech/$1 [R=301,L]
(Falls noch nicht geschehen, mod_rewrite mit RewriteEngine on und RewriteBase / einschalten. Redirect aus dem ersten Vorschlag oben muss nicht aktiviert werden.)

RewriteCond prüft mit -f und -d, ob die angegebene Datei bzw. das Verzeichnis existiert. Der Pfad setzt sich zusammen aus dem Wurzelverzeichnis des Webservers DOCUMENT_ROOT, natürlich deinem neuen Verzeichnis /tech sowie dem angefragten URL-Pfad REQUEST_URI.
Nachteil dieser Vorgehensweise: Falls eine neue Seite mit dem gleichen Pfad und Namen wie die alte existiert, wird die neue quasi unsichtbar. Solche doppelten Pfade müssen vom Vergleich ausgenommen werden, in der ersten RewriteCond-Zeile wird zum Beispiel sichergestellt, dass der Zugriff nicht auf / erfolgt („!=/“ bedeutet „nicht gleich /“), denn / soll ja nicht nach /tech/ umgeleitet werden.

Der erste Weg mittels Redirect beansprucht weniger Resourcen, deshalb ist er zu bevorzugen, solange es nur ein paar URLs sind. Werden es allerdings mehr, ist zu beachten, dass die .htaccess bei jedem einzelnen Zugriff auf den Webserver eingelesen und ausgewertet werden muss. Zig Redirect-Zeilen könnten dann schon beim Einlesen mehr Zeit brauchen als der mod_rewrite-Aufstand verursacht.

In jedem Falle solltest du die Zugriffe auf die alten URLs beobachten (stehen im Zugriffsprotokoll) und versuchen, alte Verweise vom verantwortlichen Seitenautor abändern zu lassen.

Verfasst: 30.01.2009, 14:23
von devolo01
Hi ersteinmal vielen Dank habe meine httaccess jetzt wie folgt geändert

Code: Alles auswählen

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+).html$ index.php?page=$1 [QSA]

# URLs, die auch im neuen Bereich existieren, von der Umleitung ausschließen 
RewriteCond %{REQUEST_URI} !=/ 

# Prüfen, ob URL im Bereich der alten Seiten als Datei oder Verzeichnis existiert 
RewriteCond %{DOCUMENT_ROOT}/tech%{REQUEST_URI} -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/tech%{REQUEST_URI} -d 

# Falls ja, in den alten Bereich umleiten 
RewriteRule (.*) tech/$1 [R=301,L]
Der Oberebereich ist daher gesetz worden, da ich für das CMS das ich auf dem Hupverzeichniss liegen habe SEO freundliche urls verwende.

Leider funktioniert die weiterleitung nicht wie erhofft. Ich habe in dem Unterverzeichniss tech undgefähr 60 Seiten die wiederrum auch in Unterordner hinterlegt sind.

Kann es sein das durch meinen ersten Eintrag in der httaccess der von dir gegeben code seine gültigkeit verliert ?

Danke nochmal für die Hilfe.

LG Christian

Verfasst:
von

Verfasst: 30.01.2009, 15:35
von Mork vom Ork
devolo01 hat geschrieben:

Code: Alles auswählen

RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+).html$ index.php?page=$1 [QSA]
Kann es sein das durch meinen ersten Eintrag in der httaccess der von dir gegeben code seine gültigkeit verliert ?
Ja, du prüfst in den ersten zwei RewriteCond-Zeilen, ob der angefragte Pfad nicht existiert (!-f bzw !-d) - das trifft natürlich gerade auf deine alten URLs zu, sie werden in index.php?page=bla umgebogen, bevor eine Weiterleitung nach tech/bla greifen kann.

Setze die tech-Weiterleitung vor obigen Code.

Verfasst: 30.01.2009, 20:27
von devolo01
Hallo Mork vom Ork,

vielen Dank für deine Hilfe. Es funktioniert jetzt alles ohne weitere Probleme.

Vielen Dank nocheinmal