Seite 1 von 1

301 Umleitungen von ca. 1900 urls mit Qerystrings

Verfasst: 03.08.2010, 20:29
von Kay1979
Hallo Ihr.


Mir wurde dieses Forum hier empfohlen. Ich habe schon sehr viel im Netz gesucht, aber das richtige nicht gefunden.

Ich habe einen Onlineshop. Dieser ist schon mit vielen Seiten im Googleindex zu finden.
Nun habe ich vor die Shopsoftware komplett neu gemacht. Unter anderen werden da auch SEO URL´s genutzt.

Die alten URL´s würden ins Leere laufen und Fehlerseiten hervorrufen.

Wie leite ich die alten 1900 Seiten auf die neuen 1900 Seiten weiter.
Die Artikel aus dem alten Shop werden komplett in den neuen shop übernommen. Nur die URL´s sind etwas andern.

Hier ein Beispiel am Finnlandbutton
Das ist die alte Url
https://www.flaggenbutton.de/product_in ... b3c199314a

So wird die neue URL aussehen: Die neue URL gibt es aber noch nicht
https://www.flaggenbutton.de/Europa/Nor ... 37-mm.html
Der alte Shop wird gelöscht wenn der neue läuft

Könnt Ihr mir bitte helfen , wie ich die alten URL´s auf die neuen Umleiten kann. Es ist auch nicht schlimm wenn da viel Handarbeit hinter steckt. Die nehme ich in Kauf.
Wie würde denn der Text in der .htaccess aussehen ?

Mein Provider unterstützt mod_rewrite.


Vielen Dank für Eure Hilfe.

Viele Grüße

Kay

Verfasst:
von

Verfasst: 03.08.2010, 20:47
von waneck
So würde die saubere 301 Umleitung an Deinem Beispiel aussehen:

Redirect permanent /product_info.php?cPath=25_27&products_id=890&osCsid=0aeb7e42b6153e7d274220b3c199314a https://www.flaggenbutton.de/Europa/Nor ... 37-mm.html

Alles steht in einer Zeile.

Gruß waneck

Verfasst: 04.08.2010, 10:38
von Kay1979
Hallo Waneck.

Vielen Dank für Deine schnelle Hilfe.
Ich habe nun ersteinmal eine Testseite für die neue URL eingerichtet. so kann ich testen ob die Umleitun funktioniert. Aber leider passiert noch gar nichts.


Ich sende einmal den Inhalt der .htaccess mit.
In dieser Datei ist auch noch eine Umleitung, die bewirkt dass meine Webseite nur mit www und nicht ohne erreichbar ist.
Hier der Inhalt.


RewriteEngine on
RewriteCond %{HTTP_HOST} ^flaggenbutton.de$ [NC]
RewriteRule ^(.*)$ https://www.flaggenbutton.de/$1 [R=301,L]
RewriteCond %{THE_REQUEST} index\. [NC]
Redirect permanent /product_info.php?cPath=25_27&products_id=890&osCsid=0aeb7e42b6153e7d274220b3c199314a https://www.flaggenbutton.de/Europa/Nor ... 37-mm.html


Ich habe die Umleitung natürlich in eine Zeile geschrieben.


Vielen Dank und viele Grüße

Kay

Verfasst: 04.08.2010, 10:50
von Synonym
@waneck
Das ist unfug, sorry wenn ich das so sage.

1. Ändert sich die sid immer (0aeb7e42b6153e7d274220b3c199314a)
2. Hat die als fester Wert in der Weiterleitung nichts zu suchen
3. Funktioniert es mit Redirect permanent sowieso nicht, sondern nur per Cond und Rule.

"Redirect" ist mod_alias und da steht in der Doku:
mod_alias is designed to handle simple URL manipulation tasks. For more complicated tasks such as manipulating the query string, use the tools provided by mod_rewrite.
@Kay1979
In welchem Zusammenhang stehen denn:
/product_info.php?cPath=25_27&products_id=890
und
/Europa/Nordeuropa/Finnland-Button-37-mm.html

Gibt es da ein Muster bezogen auf das 25_27, 890 und der neuen URL?

Wenn es da kein technisch erkennbares Muster gibt dann musst Du die nämlich wirklich alle per Hand umleiten

Verfasst: 04.08.2010, 11:49
von Kay1979
Hallo Synonym.


Vielen dank für Deine Antwort.

Ja die sid ändert sich immer.

Die alten URL /product_info.php?cPath=25_27&products_id=890 steht in Zusammenhang mit /Europa/Nordeuropa/Finnland-Button-37-mm.html in so fern, dass die Artikel gleich bleiben.

Ich werde ja bald eine komplett neue Shopsoftware nutzen. Die alten URL´s waren ja nicht so gut.
Die neuen URL sind dann SEO URL´s.

Der alte shop wird deaktiviert sobald der neue aktiviert wird.
Nun möchte ich eine 301 Umleitung für jede URL einrichten.

Ein Muster gib es noch nicht da der neue shop noch nicht aktiviert wurde. Allerdings habe ich eine testseite für /Europa/Nordeuropa/Finnland-Button-37-mm.html eingerichtet.

Kannst du mir denn für die Testumleitung eine Cond und Rule zeigen.
Per Hand umschreiben ist nicht das problem, sonder eine Fleißarbeit. :D

Vielen Dank und viele grüße

Kay

Verfasst: 04.08.2010, 12:05
von derHund

Code: Alles auswählen

<IfModule mod_rewrite.c>
RewriteCond %&#123;QUERY_STRING&#125; ^cPath=25_27&products_id=890
RewriteRule /product_info\.php /Europa/Nordeuropa/Finnland-Button-37-mm.html &#91;R=301,L&#93;
</IfModule>
So ungefähr müsste das funtionieren, testen werde ich es jetzt nicht können.

Das Erstellen der Regeln würde ich unbedingt per Script erledigen, per Hand dürfte das neben dem enormen Aufwand auch recht fehlerträchtig sein.

Wenn es nicht funktioniert, schau mal ins Errorlog bzw. sag gleich, ob 500, 403 oder 404 als Antwort kommt.

Edit: jaja ...

Verfasst: 04.08.2010, 12:35
von Synonym
@derHund
Ja, so war mein erster Ansatz auch, aber da gibt es ein Problem. id=890 das trifft dann auch auf 8902 oder 89034 zu. Und das Ende muss es auch nicht unbedingt sein, da die sid ja noch kommen könnte, also bin ich nun hier (ungetestet)

Code: Alles auswählen

Produkte&#58;
RewriteCond %&#123;QUERY_STRING&#125;  ^cPath=25_27&products_id=890$ &#91;OR&#93;
RewriteCond %&#123;QUERY_STRING&#125;  ^cPath=25_27&products_id=890&osCsid=&#91;0-9a-z&#93;+$
RewriteRule ^/product_info\.php$  /Europa/Nordeuropa/Finnland-Button-37-mm.html? &#91;R=301,L&#93;

Kategorien&#58;
RewriteCond %&#123;QUERY_STRING&#125;  ^cPath=25_27$ &#91;OR&#93;
RewriteCond %&#123;QUERY_STRING&#125;  ^cPath=25_27&osCsid=&#91;0-9a-z&#93;+$
RewriteRule ^/index\.php$  /Europa/Nordeuropa/? &#91;R=301,L&#93;
RewriteCond %{QUERY_STRING} ^cPath=25_27&products_id=890$ [OR]
Soll auf URLs zutreffen, die nur den Pfad und die Produkt-ID haben, in genau der Reihenfolge

RewriteCond %{QUERY_STRING} ^cPath=25_27&products_id=890&osCsid=[0-9a-z]+$
für selbiges, nur dass die sid noch hinten dran kommen kann

RewriteRule ^/product_info\.php$ /Europa/Nordeuropa/Finnland-Button-37-mm.html? [R=301,L]
Ist die eigentliche Weiterleitung, wobei das ? am Ende die Übergabe des vorherigen Query-Strings verhindern soll.

Allerdings, und das wäre wohl mein Ansatz... Ich würde das nicht alles per htaccess machen, sondern per PHP-Script. Alles product_info.php oder index.php ist per htaccess an ein Weiterleitungsscript übergeben und die Weiterleitung dann dort machen.

Verfasst: 04.08.2010, 19:25
von Kay1979
Hallo der Hund,Hallo Synonym

Vielen Dank für Deine Hilfe.
Ich habe den Code einmal in die .htaccess eingegeben.
Es ist aber nichts geschehen. Es kommt auch keine Fehlermeldung.Die alte Seite ist stehen geblieben.

Ich habe bei mir keine Errorlog datei gefunden. Wo liegt die denn. Vielleicht liegt es ja daran, dass der alte Shop noch läuft.

Wie erstelle ich denn so ein Script für die Weiterleitungen?

Mir raucht schon total der Kopf. Ich versuche nun schon seit Stunden eine Weiterleitung hinzubekommen, aber nichts funktioniert. Warum ist das denn nur so kompliziert.

Kann jemand von Euch so ein Script usw. erstellen. Natürlich soll das auch nicht umsonst gemacht werden?

Viele Grüße

Kay

Verfasst: 04.08.2010, 20:59
von chris21
Hallo Kay

für die Performance Deiner Seite wäre es wohl besser, dieses Problem über ein PHP-Skript zu regeln.

Die Rewrite Regeln vom Synonym sind zwar schon brauchbar für Deinen Ansatz (nur müssen die Punkte in der RewriteRule nicht maskiert werden, also ".php" und nicht "\.php").

1900 Rewrite Regeln in der .htaccess machen aber keinen Spaß.

Also stimme ich mit Synonym für ein Skript, welches Du einsetzen solltest.

Die eigentliche Arbeit am Skript ist nur das Aufnehmen der Daten (Alte Kategorie-ID gegenüber neuem Pfad). Die tatsächliche Logik des Skripts wäre schnell erstellt.

Falls es jedoch eine Deckung zwischen neuem Pfad und alten Namen der Kategorien bzw. Produkte gibt, wäre es sicherlich noch schneller machbar ohne Aufnahme der 1900 Datensätze :) Die könnte man dann sicherlich aus den vorhandenen Shop-Skript extrahieren.

Verfasst: 05.08.2010, 05:36
von Kay1979
Hallo chris.

Danke erst einmal für Deine Antwort.

Nun muss ich ersteinmal alle was hier geschrieben wurde verarbeiten. Ich habe ja nicht so viel Ahnung von PHP usw.

Ich bin für ein paar Tage nicht zu Hause und kann deshalb bis Sonntag nicht online gehen und hier im Forum antworten.

Ich wünsch Euch allen schoneinmal ein schöne Wochenende.

Viele Grüße

Kay

Verfasst: 05.08.2010, 16:05
von Synonym
Ok, dass sich da nichts tut kann vieles sein. Ich denke da aber mal viel mehr an die "/". Der eine Server braucht sie, der andere nicht....

Versuche nur mal

Code: Alles auswählen

RewriteEngine on
RewriteCond %&#123;HTTP_HOST&#125; ^flaggenbutton.de$ &#91;NC&#93;
RewriteRule ^&#40;.*&#41;$ http&#58;//www.flaggenbutton.de/$1 &#91;R=301,L&#93;

RewriteRule ^product_info\.php$ /Europa/Nordeuropa/Finnland-Button-37-mm.html? &#91;R=301,L&#93;
einzutragen, natürlich aber mit dem obligatorischen RewriteEngine ON, sonst geht es ja eh nicht.

Rufe dann mal einfach "product_info.php" auf und schau ob die Weiterleitung geht. Eventuell muss das / vor Europa dann auch noch weg.

So lange testen bis es geht. Dann nimm die beiden Cond jeweils einzeln mit dazu und teste erneut.

Aber Achtung, nicht zu lange testen, ist ja das Produktivsystem ;-) Eventuell auch für den ersten Test ohne die Conds einfach ^product_info_test\.php$ nehmen und entsprechend product_info_test.php aufrufen.

Und Chris,
der maskierte Punkt vor php ist wichtig, den die Datei ist nun mal eine ".php". Beim Pattern muss maskiert werden, dem der Substitution hingegen darf es nicht.

Der Punk alleine steht für "ein beliebiges Zeichen", also würde das dann auch bei product_infoXphp greifen. Ohne Maskierung würde es daher schon gehen, da auch ein Punkt ein beliebiges Zeichen ist, aber eben nur zufällig. Soll es ja aber nicht, sondern nur bei .php :wink:

Code: Alles auswählen

Escaping&#58;
  \char       escape the given char
              &#40;for instance, to specify the chars ".&#91;&#93;&#40;&#41;" etc.&#41;