Jeśli tworzymy nową wersję istniejącej już witryny, może pojawić się potrzeba aby przekierować stare linki na nowe adresy. Jest to ważne z perspektywy SEO, szczególnie jeśli portal który tworzymy jest rozbudowany i posiada wiele treści.
Z pomocą przychodzi nam pakiet redirects – raczej mało znana, jednak nadal istniejąca w django paczka, powalająca obsługiwać i dodawać przekierowania adresów.
Co będzie nam potrzebne?
Na początek, wymagana jest framework „sites” oraz wspomniana paczka redirects. Obydwie rzeczy musimy umieścić w settingach w sekcji INSTALLED_APPS oraz zadeklarować wartość SITE_ID.
INSTALLED_APPS = [
# Reszta pakietów
"django.contrib.sites",
"django.contrib.redirects"
]
SITE_ID = 1
Nastepnie w sekcji MIDDLEWARE dodać na końcu (to ważne) „django.contrib.redirects.middleware.RedirectFallbackMiddleware”
MIDDLEWARE = [
# Reszta pakietów
"django.contrib.redirects.middleware.RedirectFallbackMiddleware"
]
Następnie uruchomić migracje:
$ python manage.py migrate
Gotowe 😉 Teraz po zalogowaniu się do panelu administracyjnego, pojawi się sekcja „Redirects” w której możesz podać starą ścieżkę oraz nową ścieżkę. Wszystkie przekierowania domyślnie są wykonywane z kodem 301 (Moved Permanently) lub 410 (Gone) jeśli wprowadziliśmy tylko starą ścieżkę a nie uzupełniliśmy nowej.
A co jeśli chce zrobić przekierowanie z kodem 302?
Możesz chcieć najpierw przetestować, czy przekierowania działają poprawnie, dlatego bezpieczniejsze byłoby utworzenie przekierowań z kodem 302. Aby to zrobić należy utworzyć klasę, która dziedziczy po RedirectFallbackMiddleware w następujący sposób.
from django.contrib.redirects.middleware import RedirectFallbackMiddleware
from django.http import HttpResponseRedirect
class CustomRedirectFallbackMiddleware(RedirectFallbackMiddleware):
response_redirect_class = HttpResponseRedirect
Teraz wystarczy, że użyjemy naszej klasy, podając ją w settingach w sekcji MIDDLEWARE – przykładowo
MIDDLEWARE = [
# Reszta pakietów
"myapp.middleware.CustomRedirectFallbackMiddleware"
]
Photo by kaleb tapp on Unsplash
