Alte URL's weiterleiten mit Django

Django, Flask, Bottle, WSGI, CGI…
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

So, ich bin gerade dabei, die alten Daten zu übernehmen. Dazu gehörten auch die alten URL's. Damit alte Links noch funktionieren bzw an einem sinnvollen Platz landen hätte ich gern eine Seite mit passender Weiterleitung.

Die alten URLs sehen z.B. so aus

products_0815.php oder
browse_001_01.php

Die alten Produkt IDs und IDs der Warengruppen landen in extra Tabellenfeldern. Wie muss ich das machen, dass ein Zugriff auf eine alte URL abgefangen und auf die richtige Seite umgeleitet wird? Wenn möglich so, dass für Google kein doppelter Content entsteht.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

(r'^products_(?P<product_id>\d+).php$', 'app.views.old_sites'),

def old_sites(request, product_id):
     ...
     get object und redirect oder 404-Seite
So in der Art sollte das funktionieren.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

wie wärs mit mod-rewrite und htaccess?
the more they change the more they stay the same
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

wenn es sich ohne .htaccess realisieren lässt würde ich das vorziehen. Der Vorschlag von SchneiderWeisse trifft es denke ich ganz gut
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

SchneiderWeisse hat geschrieben:

Code: Alles auswählen

(r'^products_(?P<product_id>\d+).php$', 'app.views.old_sites'),

def old_sites(request, product_id):
     ...
     get object und redirect oder 404-Seite
Bei dem Redirect sollte man dann noch darauf achten den korrekten Statuscode mitzuschicken.

Code: Alles auswählen

from django.http import HttpResponsePermanentRedirect

...

    return HttpResponsePermanentRedirect(...)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Wobei man das Objekt gar nicht mehr aus der Datenbank holen muss und gleich redirecten könnte, da das ja in der Regel im neuen view auch überprüft wird.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Die Dokumentation zeigt einen noch einfacheren Weg mittels generic view.

Damit Google weiß, dass die alte URL nur ein Redirect ist, muss man 301 (statt wie üblich nach einem POST 302) benutzen. Ich würde ebenfalls vorschlagen, wenn man alte URLs auf neue abbilden kann, ohne etwas in der DB nachzugucken, hier keinen extra Lookup zu machen. Ach ja, und ich würde ebenfalls eher Django statt mod_rewrite oder einem anderen Webserver-spezifischen Weg den Vorzug geben. Vielleicht ist es meine Java-Brille, die mich den Webserver und das Betriebssystem als ein Implementationsdetail sehen lässt, wo ich mich nicht in eine Abhängigkeit zu einer konkreten Implementierung begeben möchte.

Stefan
Antworten