Seite 1 von 1

mod_rewrite: error 404 - fehlerhafte URL mit übergeben

Verfasst: 15.01.2008, 22:16
von Thies
Hallo,

ich weiss nicht, ob das überhaupt möglich ist, meine Suche hat bisher leider keinen Treffer gebracht. Daher hoffe ich, dass mir hier jemand helfen kann:

Wenn man in der .htaccess per ErrorDocument 404 .... fehlerhafte Aufrufe umleitet, kann ich in PHP nicht über $_SERVER den ursprünglichen = fehlerhaften Link abfragen. Ich möchte aber die fehlerhaften Links an mein CMS übergeben, damit dieses in einer DB abfragt, ob hierzu ein neuer, korrekter Link vorliegt. Hintergrund sind anstehende Umstellungen von über 1.000 statischen HTML-Sites in ein PHP-CMS und ich will nicht jedes alte HTML-File per meta-tag auf den neuen Link umleiten.

Also dachte ich mit

ErrorDocument 404 https://localhost/phpfts/error404.php?u ... T_FILENAME}

den fehlerhaften Link übergeben zu können. Aber das klappt nicht, denn nun habe ich in den Variablen %{REQUEST_URI} bzw. %{REQUEST_FILENAME} als Text stehen :(

Kann mir jemand weiterhelfen, ob ich meine Idee überhaupt umsetzen kann oder ob das gar nicht geht?

Danke im Voraus

Frank-Andre

Verfasst:
von

Verfasst: 16.01.2008, 01:07
von marguardth
hallo,

wenn du die alten seiten auf die neuen seiten umleiten willst, solltest du zuerst schon mal nicht mit 404 arbeiten, sondern mit 301 - Moved permanently.

das kannst du auf zwei verschiedenen art und weisen erreichen ... vielleicht auch mehr, aber die fallen mir um 1 uhr nachts nicht mehr ein.

1. je nachdem, wie die neuen von den alten urls abweichen per mod_rewrite also mit RewriteCond und RewriteRule in der ,htaccess oder

2. per php, indem du bei einer falschen anfrage die neue korrekte url per hand aus der db holst, und dann per header("HTTP/1.0 301 Moved Permanently"); und header("Location: https://www.example.com/"); umleitest.

wie das genau funktioniert und wie du es auf deine seite anwendest, wirst du herausfinden, wenn du mit den oben genannten begriffen die suchmaschinen deiner wahl bemühst. jenachdem, welchen cms du benutzt kann es auch eine extension geben, mit der du diese aufgabe realisieren kannst.

Verfasst: 16.01.2008, 08:55
von Thies
Moin,

für mein Grundproblem habe ich inwzischen eine Lösung erhalten, der 404er Aufruf war "falsch" (manchmal sieht man den Wald vor lauter Bäumen nicht :D ):

Code: Alles auswählen

ErrorDocument 404 /phpfts/error404.php
Dann steht in der „$_SERVER['REQUEST_URI']“-Variable die URL doch zur Verfügung.
marguardth hat geschrieben:wenn du die alten seiten auf die neuen seiten umleiten willst, solltest du zuerst schon mal nicht mit 404 arbeiten, sondern mit 301 - Moved permanently.
Klar, würde ich auch gern, aber ich sehe derzeit keine sinnvolle Möglichkeit zur Realisierung (siehe unten)
marguardth hat geschrieben:das kannst du auf zwei verschiedenen art und weisen erreichen ... vielleicht auch mehr, aber die fallen mir um 1 uhr nachts nicht mehr ein.
Manchmal habe ich da meine besten Ideen ... und morgens wieder vergessen :)
marguardth hat geschrieben:1. je nachdem, wie die neuen von den alten urls abweichen per mod_rewrite also mit RewriteCond und RewriteRule in der .htaccess oder
Die neuen URL weichen komplett von den alten ab, da die bisherigen frei Schnauze festgelegt wurden und die neuen systematischer sind. Daher müsste ich jeden Link einzeln eintragen und das würde die .htaccess sprengen :(
marguardth hat geschrieben:2. per php, indem du bei einer falschen anfrage die neue korrekte url per hand aus der db holst, und dann per header("HTTP/1.0 301 Moved Permanently"); und header("Location: https://www.example.com/"); umleitest.
Das geht leider aus heutiger Sicht auch nicht, denn es liegen weiterhin html und shtml-Dateien auf dem Server, so dass ich keine allgemeine RULE anlegen kann, die alles andere auf irgendeine php umleitet, die dann prüft. Also muss ich diese Umleitung leider so realisieren oder wirklich jede html-Datei die umgestellt wurde per header umleiten.

Oder hat jemand eine andere Idee?
marguardth hat geschrieben:wie das genau funktioniert und wie du es auf deine seite anwendest, wirst du herausfinden, wenn du mit den oben genannten begriffen die suchmaschinen deiner wahl bemühst. jenachdem, welchen cms du benutzt kann es auch eine extension geben, mit der du diese aufgabe realisieren kannst.
Ist ein eigen entwickeltes CMS, daher muss ich mich um alles selber kümmern.

Danke für die Hinweise, vielleicht fällt mir ja doch noch was "besseres" ein.

CU

Frank-Andre

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 16.01.2008, 11:00
von marguardth
moin,

so wie's aussieht, hast du egal, wie du es angehst keine möglichkeit, eine vernünftige umleitung zu erzeugen, ohne diese für jede url händisch anzulegen. das wäre auch der fall, wenn du die umleitung per header realisierst.

was das angeht: ich gehe mal davon aus, dass du etwas der folgen art meinst

Code: Alles auswählen

<meta http-equiv="refresh" content="0; URL=http&#58;//somepage.com/">
davon würde ich tunlichst die finger lassen, weil das den sumas ganz und gar nicht gefällt und deine seite früher oder später (vermutlich früher) aus dem index nehemen werden.

läuft auf deinem webspace ein apache?
falls ja, kann du diesem per .htaccess mitteilen, dass auch html-files durch den php-parser laufen sollen.

Code: Alles auswählen

addtype application/x-httpd-php .html
damit hast du nun wieder die möglichkeit 2.
einfach die php-header befehle als erstes in jede der alten html-files einfühen und auf die richtige neue adresse umleiten.

da du die http-equiv anweisung auch per hand in jede datei eintragen müsstest, wäre der aufwang der gleiche und das ergebnis für dich sehr viel besser!

die sache hat nur einen kleinen, wie ich meine, haken. die addtype-anweisung in der .htaccess verlangsamt die auslieferung deiner seiten minimal. das sollte also keine dauerhafte lösung sein. da du sumas und leser aber sowieso komplett und dauerhaft auf neue urls umleiten möchtest, wirst du die alten html-files irgendwann löschen und dann kannst du auch die anweisung aus der .htaccess wieder entfernen ... and all will be well.

Verfasst: 16.01.2008, 11:47
von Thies
Hi marguardth,
marguardth hat geschrieben:so wie's aussieht, hast du egal, wie du es angehst keine möglichkeit, eine vernünftige umleitung zu erzeugen, ohne diese für jede url händisch anzulegen. das wäre auch der fall, wenn du die umleitung per header realisierst.
Ja, das ist scheinbar wirklich so :( Oder ich müsste mein CMS komplett umschreiben, dass alle "Umleitungen" über eine PHP-Datei laufen. Der Aufwand wäre noch höher.
marguardth hat geschrieben:was das angeht: ich gehe mal davon aus, dass du etwas der folgen art meinst

Code: Alles auswählen

<meta http-equiv="refresh" content="0; URL=http&#58;//somepage.com/">
Ja, genau.
marguardth hat geschrieben:davon würde ich tunlichst die finger lassen, weil das den sumas ganz und gar nicht gefällt und deine seite früher oder später (vermutlich früher) aus dem index nehmen werden.
Ehrlich?!? Wieso dass denn? Das habe ich bisher so noch nicht gehört gehabt.
marguardth hat geschrieben:läuft auf deinem webspace ein apache?
falls ja, kann du diesem per .htaccess mitteilen, dass auch html-files durch den php-parser laufen sollen. da du die http-equiv anweisung auch per hand in jede datei eintragen müsstest, wäre der aufwang der gleiche und das ergebnis für dich sehr viel besser!
Ja habe ich, aber die meisten Dateien sind .shtml mit includes, die ich dann alle umstellen müsste. Auch sehr aufwendig.
marguardth hat geschrieben:die sache hat nur einen kleinen, wie ich meine, haken. die addtype-anweisung in der .htaccess verlangsamt die auslieferung deiner seiten minimal. das sollte also keine dauerhafte lösung sein.
Gibt es da Erfahrungswerte, wie stark die Performance-Belastungen sind?
marguardth hat geschrieben:da du sumas und leser aber sowieso komplett und dauerhaft auf neue urls umleiten möchtest, wirst du die alten html-files irgendwann löschen und dann kannst du auch die anweisung aus der .htaccess wieder entfernen ... and all will be well.
Ich bin noch am überlegen, ein paar ganz alte Bereiche, die nicht zwingend umgestellt werden müssen und aufgrund von dutzenden internen Verlinkungen (Komplettlösungen mit vielen Hinweisen zu einzelnen Spielen) sehr aufwendig in der Umstellung wären, eventuell doch einfach "unberührt" zu lassen. Das wäre dann dauerhaft kontraproduktiv. Muss ich mir mal genau überlegen.

Die Idee mit der 404er-Abfrage war einfach den Besuchern dann als Dienstleistung direkt den neuen Link zu präsentieren, damit man sich nicht erneut durchklicken muss. Na ja, mal schauen.

Danke für die guten Hilfestellungen

CU

Frank-Andre

Verfasst: 29.01.2008, 11:37
von Thies
Ich habe am Samstag abend meine Website z.T. auf das neue CMS umgestellt und die Umleitung der 404er auf die Errorpage mit Abfrage der "fehlerhaften" URL klappt soweit ganz gut. Nun kann ich sehen, welche "alten" Seiten besonders häufig aufgerufen werden und für diese dann eine Umleitung direkt in der .htaccess eintragen, die weniger häufigen Aufrufe erhalten dann den neuen Link auf der Error-Page angezeigt. Damit überfrachte ich dann die .htaccess nicht zu sehr.

Ich habe aber eine Detailfrage und bin mir nicht ganz sicher, wie ich das am besten lösen soll:

Nicht nur fehlerhafte Seiten-URL bekomme ich in die DB eingetragen, sondern auch wenn die nicht vorhandene favicon.ico aufgerufen wird oder Grafikdateien extern verlinkt sind (Frechheit), die nicht mehr existieren. Ich will diese Daten aber gar nicht erfassen, das bläht die URL-Liste nur auf. Jetzt überlege ich, ob ich einfach in ein Array alle Endungen eintrage, die nicht erfasst werden sollen (.ico, .gif, .jpg ....) und wenn diese im Link vorkommen, wird der Link nicht erfasst. Ist das eine sinnvolle Vorgehensweise oder habt Ihr bessere Ideen?

Off-Topic:
1. Google ist wirklich schnell. Die ersten neuen Seiten von Samstag abend sind bereits seit gestern abend online. Wow!

2. Ich habe ein Tracker im CMS, um mögliche Hackerscripts zu verhindern, also. z.B. ob in der URL Begriffe wie chr( oder wget oder union vorkommen. Dann wird das CMS direkt blockiert. Durch die Error-Umleitung sehe ich nun, welche URL gar nicht erst durch das CMS oder meine Forensoftware erfasst werden, weil der Link falsch ist. Das sind seit Samstag über 30 Stück. Wahnsinn! Jetzt habe ich z.T. die IPs und sehe, dass Server von hosteurope.de und so genutzt werden. Bringt das was, die Hoster anzuschreiben und hinzuweisen, dass deren User eventuell den Server missbraucht?

Danke im Voraus

Frank-Andre