Seite 1 von 1

Alte URL's weiterleiten mit Django

Verfasst: Mittwoch 10. Februar 2010, 16:30
von burli
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.

Verfasst: Mittwoch 10. Februar 2010, 16:36
von nemomuk

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.

Verfasst: Mittwoch 10. Februar 2010, 17:12
von Dav1d
wie wärs mit mod-rewrite und htaccess?

Verfasst: Mittwoch 10. Februar 2010, 17:18
von burli
wenn es sich ohne .htaccess realisieren lässt würde ich das vorziehen. Der Vorschlag von SchneiderWeisse trifft es denke ich ganz gut

Verfasst: Mittwoch 10. Februar 2010, 18:52
von /me
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(...)

Verfasst: Mittwoch 10. Februar 2010, 19:18
von nemomuk
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.

Verfasst: Mittwoch 10. Februar 2010, 20:01
von sma
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