Eine häufige Problemstellung: Bei der Umgestaltung einer vorhandenen Internetseite oder gar einem kompletten Relaunch ändern sich Inhalte und Seitenstruktur.
Verlinkungen von externen Seiten laufen somit ins Leere. Ebenso erhalten bereits von Suchmaschinen indizierte Seiten nun einen 404-Fehlercode (Page not found), während die neuen Seiten gleichen oder ähnlichen Inhalts erst neu indiziert werden und PageRank aufbauen müssen.
Als Lösung bietet Joomla 2.5 hier eine neue Funktion an, mit der sich URLs direkt im Backend umleiten lassen. In unserer praktischen Arbeit funktionierte diese Funktion jedoch unzureichend. Und das Umleiten vieler Domains mit der Joomla-eigenen Funktion verursacht einen erheblichen Arbeitsaufwand.
Daher entwickelten unsere PHP-Programmierer in Frankfurt eine eigene skriptgesteuerte Domain-Umleitung für Joomla, mit der Sie veraltete ULRs einfach und zuverlässig auf die entsprechenden URLs der neuen Internetseite umleiten können.
Das PHP-Skript „error.php“ erkennt 404-Fehler beim Aufruf und erzwingt eine Umleitung auf den neuen Domain-Pfad der entsprechenden Inhaltsseite (Permanent Redirect – Status Code 301). Sind die aufgerufenen Inhalte komplett verschwunden, lässt sich wahlweise auch eine eigene 404-Fehlerseite aufrufen. Beim Umleiten auf neue ULRs wird hierbei automatisch ein Status-Code 301 gesendet, bei der Anzeige einer Fehlerseite ein Status-Code 404.
Die Domainumleitung besteht aus insgesamt zwei Dateien, dem PHP-Skript error.php und der Konfigurationsdatei errorlist.txt, in welcher die gewünschten Domainumleitungen angegeben werden. Beide Dateien werden direkt im Template-Ordner der Website abgelegt.
Vor dem Datei-Upload werden die umzuleitenden URLs in die Konfigurationsdatei (errorlist.txt) eingetragen in der Form:
/alte/url.html : /neue/url.html
(also ohne den eigentlich Domain-Stamm)
Beispiel:
Nachdem dies erledigt ist, prüfen Sie die Domainumleitung, indem Sie einzelne veraltete URLs direkt in den Browser eingeben. Sie sollten nun automatisch auf die neuen URLs weitergeleitet werden.
1. Legen Sie eine neue Fehlerseite als Beitrag in Joomla an:
Tipp: Im Content dieser Seite können Sie z.B. einen Link zur Startseite und zu wichtigen Unterseiten integrieren (z.B. Hier gelangen Sie direkt zu unseren Angeboten: [Link Angebot 1], [Link Angebot 2] etc.).
2. Legen Sie nun ein neues verstecktes Menü an, um die Seite mit einer sprechenden ULR aufrufen zu können.
3. In diesem Menü erzeugen Sie nun einen neuen Menüpunkt, den Sie mit dem Beitrag verlinken.
4. Geben Sie in Zeile 25 der Datei error.php den Pfad zur erstellten Fehlerseite an. Dies ist i.d.R. der „Alias“, der für den neuen Menüpunkt erzeugt wurde.
Zum Schluss noch ein paar Tipps, um veraltete Domains zu finden:
Kommentare sind geschlossen.
Sieht mir nach einer guten Lösung aus, ich war wohl etwas übereifrig bei der Neuralisierung unserer Homepage (alles um Wolle und Garn) und habe viele alte url’s mit /shop.html?… . Die Umleitungskomponente funktioniert aber mit .html nicht.
Noch eine kleine Frage: Verwende momentan noch die error.php des beez5 templates, wie müsste diese aussehen wenn ich die Vorteile von beiden nutzen möchte.
Über eine Antwort würde ich mich sehr freuen – gäbe dann natürlich auch einen Backlink 😉
Bis anhinn eine schöne Woche!
Danke für die Infos.
Die error.php vergleich derzeit nur den Skriptnamen/“Dateinamen“, nicht aber URL-Parameter. Aber danke für den Hinweis, das wäre sicherlich eine sinnvolle Ergänzung, die wir bei einem unserer nächsten Updates berücksichtigen werden.
Die error.php von beez5 müsste man händisch mit dem Code von unserer error.php ergänzen bzw. „mergen“.
Dies werden wir bei Gelegenheit ebenfalls ansehen. 😉
na endlich kann mir mal jemand sagen, wie ich die alten URls aufindig machen kann. Der Tipp am Ende ist die Lösung. Vielen Dank hierfür. Ab in die Fav-Liste mit dem Artikel !!!
Gute Arbeit! Ich bin begeistert!!!
Bei einem Aufruf der Art „index.php/seite.html“ funktioniert die Weiterleitung aber leider nicht, und es wird ein PHP-Error ausgegeben.
Zeile 53 sollte eine zusätzliche Prüfung bekommen, sonst werden teilweise diese PHP-Fehler ausgegeben.
if($cRedirOrig!=“*“ && isset($_SERVER[„REDIRECT_URL“]) && $_SERVER[„REDIRECT_URL“]==$cRedirOrig) {
Normalerweise funktionieren Weiterleitungen der Art:
„/cms/alte_seite.html“ -> „/neue_seite“
Das folgende Konstrukt mit „index.php“ funktioniert jedoch nicht:
„/cms/index.php/alte_seite.html“ -> „/neue_seite“
Damit dies auch funktioniert, muss das Originalskript angepasst werden:
———————————————————————–
Statt $_SERVER[„REDIRECT_URL“] sollte man $_SERVER[„REQUEST_URI“] verwenden.
Einfach im gesamten Quelltext austauschen.
Danke, Carsten. Ich habe die Änderung eingepflegt 😉
Ist es mit dieser Methode auch möglich, einen alten RSS-Feed auf einen neuen RSS-Feed umzuleiten? Mein erster Versuch damit war nicht erfolgreich.
RSS-Feeds schlagen offensichtlich nicht in der Template-eigenen error.php auf – daher ist mir aktuell kein schneller Weg bekannt, den Redirect vorzunehmen.
Denkbar wäre natürlich einen Redirect via .htaccess-Datei, also so etwas in der Art:
RewriteRule ^feed-alt\.html$ feed-neu.html [R=301,L]
Das habe ich jetzt mal ausprobiert und im Abschnitt „Custom redirects“ diese Zeile eingegeben:
RewriteRule ^/de/component/ninjarsssyndicator/?feed_id=1&format=raw$ /index.php/de/?format=feed&type=rss [R=301,L]
Das brachte allerdings noch keinen Erfolg.
Steht das „&“ auch wirklich als „&“ oder als „&“?
Es steht beide Male als „&“.
Inzwischen habe ich festgestellt, dass die Umleitung doch zumindest eingeschränkt funktioniert. Das heißt, in meinem RSS-Programm wird eine RSS-Nachricht mit eintägiger Verspätung angezeigt. Gebe ich die Feed-Adresse im Browser ein, lande ich allerdings auf meiner neu angelegten Fehlerseite.
[…] Eine ausführliche Anleitung und den Skriptdownload finden sie im Blog von formativ.net unter der Webadresse: https://blog.formativ.net/domainumleitungen-eigene-404-seite-fuer-joomla/ […]
Hallo,
erst einmal freue ich mich euren blog gefunden zu haben. Da sich hier offensichtlich mit absolut praxisnahen Themen beschäftigt wird.
Mir ist immer nicht ganz klar, warum in joomla tolle Funktionen implementiert werden die dann leider überhaupt nicht konsequent umgesetzt werden. Manchmal sehr zäh alles.
Umso mehr freue ich mich hier vielleicht eine Lösung gefunden zu haben – zumindest für dieses Problem.
Nach einem kompletten Relaunch einer unserer domains (http://www.1espresso.de), mussten wir feststellen, dass sich nicht alle alten URL`s einfangen lassen.
sowas z.B.
index.php?option=com_content&task=category§ionid=4&id=13&Itemid=48
geht das mit eurem Script?
Würde mich über eine Antwort freuen.
beste Grüße und weiterhin viel Erfolg
Marcel Böttcher
funktioniert leider nicht. Was mache ich falsch?
ich bekomme nur folgende Fehlermeldung:
Warning: implode() [function.implode]: Invalid arguments passed in /homepages/40/#####/htdocs/djquickwilli/templates/djquickwilli_v02/error.php on line 66
Fehler 404 – Seite nicht gefunden.
Die Fehlerseite und der Template-Name ist in der error.php geändert.
Grund könnte sein, dass auf deinem Server die Variable
$_SERVER
nicht gesetzt ist. Du kannst daher in Zeile 53 und Zeile 65 mal versuchen, $_SERVER durch $_ENV zu ersetzen.
Du kannst gerne mal die Ausgabe von
print_r($_SERVER)
und
print_r($_ENV)
posten …
das teste ich mal
Der ausgegebene Fehler bleibt gleich…
die Variablen $_SERVER und $_ENV habe ich mal ausgegeben.
Ist jeweils reichlich Text mit diversen Serverpfaden bei 1und1 usw. Ich bin nicht sicher, ob ich das posten sollte… ;o)
Jedenfalls sehen die Ausgaben inhaltlich gleich aus, nur dass SERVER ein paar zusätzliche Felder enthält.
Hallo Sebastian, ich bin nach einigem Suchen auf eure Lösungsmöglichkeit gestoßen. Allerdings habe ich die gleichen Probleme wie Christian.
————–
Warning: implode() [function.implode]: Invalid arguments passed in /…/…/…/templates/…/error.php on line 66
Fehler 404 – Seite nicht gefunden.
————–
Seid Ihr schon zu einer Lösung gekommen?
Hallo Hermann,
Zeile 66 versucht, per „file()“ den Inhalt der Fehlerseite zu laden. Wenn auf eurem Server die PHP-Konfig für „allow_url_fopen“ auf „off“ steht, wird die Fehlerseite nicht geladen. Dadurch ist das Array leer und „implode()“ wirft in Zeile 66 den genannten Fehler auf.
Lösung:
a) in der php.ini allow_url_fopen auf „on“ stellen (sofern aus sicherheitstechnischen Gründen gewollt/erlaubt!)
b) Zeile 66 unabhängig davon wie folgt ändern:
$cRedirErrorContent=@implode(„“,@file($cRedirErrorUrl));
Dann wird auf jeden Fall der Fehler unterdrückt.
Hallo Sebastian,
das funktioniert nun schon mal super – vielen Dank.
Achtung! Die Anführungszeichen aus
…plode(“”,@fil…
müssen noch nach dem coppy-paste korrigiert werden.
Leider habe ich auch noch ein weiteres Problem.
Die errorlist.txt Datei befindet sich korrekt ausgefüllt
…
/index.php?id=78 : /beispielseite.html
…
im entsprechenden Template Ordner und wird auch vom Script erkannt.
Bei Eingabe der Browseradresse
http://www.meinedomain.com/index.php?id=78
werde ich allerdings auf die 404-seite-nicht-gefunden Seite geleitet.
Eine print Ausgabe nach der Zeile 56 bleibt leer. Folglich wird keine Alternativadresse wie /beispielseite.html gefunden.
Könnt ihr mir da eventuell auch nochmal weiterhelfen?
Sebastian DANKE 🙂
Perfekt gelöst, somit kann ich die .htaccess in Ruhe lassen 🙂
Hallo Herr Mohila,
vielen Dank für Ihre Lösung. Mir ist die realisierung Lösung der Umleitung jedoch noch nicht gelungen. Die Situation: Als eigene Fehlerseite habe ich die Sitemap zur Webseite erstellt. Die Seite wird korrekt aufgerufen, die Umleitung auf diese Seite – bei Eingabe einer nicht vorhandenen URL funktioniert jedoch nicht. Bitte um Hilfe, wie die Umleitung aller Fehlermeldungen auf die Sitemap-Seite funktionieren könnte.
Hallo Herr Schoen,
wenn Sie mir Ihr Skript (error.php) per Mail an mohila@formativ.net senden, schaue ich es mir gerne einmal an.
Hallo liebes Team,
mit Freude bin ich auf eure Lösung gestoßen doch leider stelle ich mich entweder zu blöd an oder mache etwas falsch.
Ich habe im Templateordner die beiden Dateien sowie angegeben eingetragen, was auf Anhieb erstmal gar nicht funktioniert hat. Nachdem ich eure Dateien mit der im Ordner vorhandenen error.php kombiniert habe erfolgt auf alle Fälle schon mal eine Weiterleitung auf die Startseite aber leider nicht von den alten Beiträgen auf die neuen.
Ich würde mich freuen wenn ihr mir weiterhelfen könntet da meine Programmierkenntnisse sehr beschränkt sind und ich aber die Lösung bisher am besten finde…
Ich danke euch schon einmal im Voraus und schicke euch bei Bedarf gerne die Dateien zu…
Ganz liebe Grüße
Mario
[…] Erfassen Sie Ihre alten URL-Pfade und leiten Sie diese per Skript auf die entsprechenden neuen Adressen um. Über einen entsprechenden Fehler-Code teilen Sie den Suchmaschinen gleichzeitig mit, dass die Inhalte nun dauerhaft unter den neuen Adressen zu finden sind. Hier finden Sie weitere Informationen zu diesem Thema sowie ein Umleitungs-Skript für das CMS Joomla. […]
Tolles Skript das Ihr da programmiert habt. Funktioniert das auch für Joomla 3.x Versionen ?
Ich habe ein sehr merkwürdiges Problem und ich kann den Fehler nicht finden. Joomla 3.2.3
Ich habe die Joomla-Standard error.php Seite mit Eurer ersetzt.
Fast alles funktioniert, nu wenn man ein falsches Passwort, Benutzer oder gar nichts einträgt und auf Anmelden geht kommt….
Warning: implode(): Invalid arguments passed in /var/www/customers/webs/ka/ka2/templates/it_blackwhite2/error.php on line 66 Fehler 404 – Seite nicht gefunden.
Anstatt der Detaillierten Warnmeldungen die auf der Offline_seite eingeblendet werden: Benutzer unbekannt etc.
Testweise habe ich Eure error.php Datei in noch einer jungfreulichen Joomla Seite benutzt, und hier funktioniert alles einwandfrei – die Fehlermeldungen werden auf der Offline-Seite angezeigt.
Darauf hin habe ich Tipp in einer der Kommentare geändert:
$cRedirErrorContent=@implode(“”,@file($cRedirErrorUrl));
Auf meiner eigentlichen Seite kommt nun auf einer Extraseite:
Fehler 404 – Seite nicht gefunden.
Was läuft da falsch? Wo muss ich suchen? Was muss ich ändern?
Wie Kann ich Weiterleitung 301 das ich bei der Seite zwei URLs angeben kann und es nicht problematisch ist wenn die erste auf die zweite weiterleitet
Hallo,
leider funktioniert bei mir die custom Fehlerseite nicht. Ich habe in der error.php folgendes angegeben:
$cTemplatePathOverride=“ws_comfort“;
$cRedirError=“/404″;
Aber der redirect zur Fehlerseite funktioniert nicht obwohl die Fehlerseite geht. Jedoch normale redirects über die errorlist funktionieren.
Beispiel: /fg
Kann mir jemand sagen warum es nicht funktioniert?
Danke Vielmals!
Grüsse
Max
@Max: Welches Verhalten tritt denn genau auf an der Stelle, an der du die Fehlerseite erwartest? Hast du nen Testlink? Gerne auch per Mail an info@formativ.net.
gute lösung
[…] neue Inhalte zu verweisen, anstatt ersatzlos zu löschen. Hierfür solltest du auch entsprechende URL-Umleitungen einrichten. In WordPress geht dies recht einfach z.B. dem Plugin […]