Frage

Starten einer neuen Website für einen neuen Kunden.Ihre alte Website enthält ungefähr 50 Produkte und leider stimmen die alten Produktnamen nicht mit dem neuen URL-Muster überein

Alte URL-Beispiele:

example.com/products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription

example.com/products.aspx?category=Foo&product=ProductNameDescription&var1=1293.123

example.com/products.aspx?category=Bar&product=ProductCategoryProdNameRandomNumbers

(Die alten URLs treffen manchmal mehr als 150 Zeichen.)

Neue URL's:

example.com/products/category/actual-product-name

Es gibt kein festes, erkennbares Muster, um vom alten zum neuen Produktnamen zu gelangen.Es gibt für die Kategorie.

Ich habe einfache mod_alias-Weiterleitungen ausprobiert, verstehe aber, dass ich stattdessen eine RewriteRule benötige.Aber ich habe Probleme.Alles was ich brauche ist eine 1-zu-1-Weiterleitung für jede dieser 50 URLs.Ich dachte, ich könnte so etwas tun:

RewriteRule ^/products.aspx?category=Foo&product=ProductName
    /products/category/new-product-name/  [R=301,NC]

Aber das funktioniert nicht.Ich weiß, das sollte einfach sein, aber ich stecke fest.Irgendwelche Ideen?

War es hilfreich?

Lösung

Verwenden Sie das folgende Muster für den Rest Ihrer Weiterleitungs-URLs.Beachten Sie, dass Sie Sonderzeichen, z. ? , . und Raum durch Hinzufügen eines \ vor ihnen

RewriteEngine on
RewriteBase /

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /products\.aspx\?category=Foo&product=SuperLongNoBreakProductNameIDDescription [NC]
RewriteRule ^ /products/category/new-product-name/  [R=301,NC]

Andere Tipps

Werfen Sie einen Blick auf die RewriteMap richtlinie von mod_rewrite.

Sie können in einer Textdatei etwas wie angeben:

products.aspx?category=Foo&product=SuperLongNoBreakProductNameIDDescription /products/category/new-product-name

Und in deinem httpd.conf

RewriteMap productmap /path/to/map/file.txt
RewriteRule ^(.*) ${productmap:$1} [R=301,NC]

Tipp:Wenn es sich um eine permanente Weiterleitung handelt, stellen Sie sicher, dass Sie eine entsprechende Weiterleitung festlegen Cache-Control und Expires header, um Browser anzuweisen, den 301 zwischenzuspeichern.

Sie können so etwas ausprobieren:

RewriteEngine On

RewriteCond %{QUERY_STRING} ^category=Foo&product=ProductName$

RewriteRule ^products\.aspx$ /products/category/new-product-name/? [R=301,L]

Notes:

  1. In per-dir (.htaccess) Kontext, das Pro-dir-Präfix wird entfernt, sodass Sie das nicht starten können RewriteRule muster mit ^/.

  2. Sie müssen verwenden RewriteCond mit der Abfragezeichenfolge übereinstimmen.

  3. Wie in einer anderen Antwort angegeben, a RewriteMap die Lösung könnte für diese Situation geeignet sein, wenn Sie Zugriff auf httpd haben.conf / die vhost-Definition für diese Site.Ich bin mir jedoch nicht sicher, wie das mit Abfragezeichenfolgen funktioniert.

  4. Für so etwas könnte es eine bessere Lösung sein, alle diese URLs in ein serverseitiges Skript umzuschreiben und das Skript zu verwenden, um die HTTP-Umleitung für jede URL durchzuführen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top