2016-12-16 7 views
0

Ich brauche eine Hand mit einigen 301 Weiterleitungen für meine Apache Htaccess-Datei. Die alten URLs enthalten Variablen am Ende und haben Strukturen wie folgt aus:301 Umleitung für alte URLs mit Sprachparameter

/furniture-248/category/570-shelves.html?lang=en 
/all-products/furniture-248/shelves.html?page=2&lang=en 
/store/product/asearch.html?path=7_632&lang=en&Itemid=284 

Die neuen URLs enthalten keine Parameter dieser Art und würden einfach von der Form:

main-cat/subcat/sale.html 

Ich habe versucht, eine reguläre 301-Weiterleitung in der htaccess-Datei, die für URLs ohne Parameter funktioniert, aber die URLs, die ?lang=en enthalten, funktionieren einfach nicht. Diese

ist, was ich habe versucht:

Redirect 301 /furniture-248/category/570-shelves.html?lang=en http://www.domain.com/shelves.html 

Ich wäre sehr dankbar für jede Hilfe und Beratung.

Vielen Dank im Voraus

+1

zeigen Sie Ihre htaccess auch – hjpotter92

+0

Ja, müssen Sie sehen, wie Sie dies versuchen, um Fix zu bieten. – SuperDuperApps

+0

Post bearbeitet, um zu zeigen, was ich versucht habe – qpidity

Antwort

0

Sie können den Query-String als Teil einer Umleitung wie diese verwenden. Sie haben zwei Möglichkeiten.

Option 1

Nehmen Sie den "? Lang = de" Teil ab und leitet es einfach alle Instanzen dieser URL, unabhängig von dem Abfrage-String ist.

Redirect 301 /furniture-248/category/570-shelves.html http://www.domain.com/shelves.html 

Dies wird den Query-String intakt lassen, so dass die neue URL gehört "? Lang = de", wenn es vorhanden ist, oder jeder anderer Abfrage-String ist.

Aber natürlich müssen Sie es möglicherweise nur umleiten, wenn es den Teil "? Lang = en" hat, oder die Abfragezeichenfolge intakt lassen, wenn die Weiterleitung möglicherweise nicht akzeptabel ist. In diesem Fall müssen sie sein ...

Option 2

Verwendung mod_rewrite:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^lang=en$ 
RewriteRule ^furniture-248/category/570-shelves\.html$ http://www.domain.com/shelves.html? [R=301,L] 

Dies tut genau das, was Sie gefragt, Umleitung /furniture-248/category/570-shelves.html?lang=en zu http://www.domain.com/shelves.html und nur das.

Beachten Sie, dass ..

  • Der Query-String separat abgestimmt ist.

  • Der öffnende Schrägstrich auf dem übereinstimmenden Teil wird nicht verwendet (weil die Tatsache, dass Sie sich in einer .htaccess-Datei auf der Stammebene befinden, den öffnenden Schrägstrich impliziert).

  • Das schließende Fragezeichen in der Weiterleitungs-URL ist wichtig, da es die Engine anweist, die vorhandene Abfragezeichenfolge zu löschen, was Sie möchten.

  • [R = 301, L] bedeutet, dass eine 301-Weiterleitung ausgeführt wird und keine weiteren URL-Umschreibungen für diese URL verarbeitet werden.

  • Für den passenden Teil in RewriteRule ist der Punkt vor "html" mit "\" versehen, da dot in einer Regex eine besondere Bedeutung hat.

  • Auch für die übereinstimmenden Teile in RewriteCond und RewriteRule bedeutet das^den Anfang der Zeichenkette und das $ bedeutet das Ende der Zeichenkette, so dass wir genau das zusammenbringen, anstatt dass es möglich ist Teil einer längeren Zeichenfolge.

Und schließlich, wenn Sie eine Reihe von ihnen sind hinzufügen, müssen Sie nur die „RewriteEngine On“ Teil einmal an der Spitze. Die anderen zwei Teile werden für jeden benötigt.

Bitte überprüfen Sie alle Weiterleitungen, die Sie mit dieser Methode hinzufügen, da es mehr zu mod_rewrite gibt, als ich in dieser einfachen Erklärung erwähnt habe.

+0

Danke für diese detaillierte Antwort. Mit Option 1, wenn ich nur die Weiterleitung hinzufügen, wie Sie es ohne die Abfragezeichenfolge haben, funktioniert die Umleitung für die vollständige URL mit der Abfragezeichenfolge nicht. Diese URLs mit der Abfragezeichenfolge am Ende zeigen, wie sie in Google Analytics angezeigt werden. Daher möchte ich sicherstellen, dass sie nicht in einem 404-Fehler enden. Wie gesagt, es ohne Abfrage-String führt zu der vollständigen URL mit Abfrage-String, der einen Fehler 404 erzeugt. – qpidity

+0

Ich habe diesbezüglich weitere Untersuchungen durchgeführt und die Antwort ein wenig aktualisiert. Die Option "Redirect" der Option 1 funktioniert mit oder ohne die Abfragezeichenfolge, aber wenn die Abfragezeichenfolge vorhanden ist, wird sie nicht aus der neuen URL entfernt. Ihre neue URL enthält also auch den "? Lang = en" -Teil. Ist es das, was du sagst? '/furniture-248/category/570-shelves.html? lang = de' leitet auf' http: //www.domain.com/shelves.html? lang = en' um. Vielleicht kannst du deinen Code zur Bestätigung eingeben. Wenn das passiert und es nicht akzeptabel ist, dann ist Option zwei das, was Sie brauchen. – SuperDuperApps

+0

Am Ende habe ich Ihre Option 2 verwendet und das funktioniert wirklich gut. Es ist ein wenig mühsam, da ich ziemlich viele eingeben muss, aber es funktioniert perfekt. Danke – qpidity