Django にはオプションで redirects (リダイレクト) アプリケーションが付属しています。リダイレクトをデータベースに保存し、リダイレクトを処理します。デフォルトでは HTTP 応答ステータスコード 301 Moved Permanently を使います。
redirects アプリをインストールするには、以下の手順に従ってください:
django.contrib.sites フレームワークが インストールされていること を確認してください。
'django.contrib.redirects' を INSTALLED_APPS 設定に追加します。
MIDDLEWARE 設定に 'django.contrib.redirects.middleware.RedirectFallbackMiddleware' を追加します。
コマンド manage.py migrate を実行します。
manage.py migrate はデータベースに django_redirect テーブルを作成します。これは、 site_id、 old_path、および new_path フィールドを持つルックアップテーブルです。
RedirectFallbackMiddleware が全ての作業を担当しています。Djangoアプリケーションが404エラーを発生させるたびに、このミドルウェアは要求されたURLが最終手段としてリダイレクトデータベースをチェックします。具体的には、与えられた old_path とサイトIDが SITE_ID 設定に対応するリダイレクトを確認します。
一致するものが見つかり、かつ new_path が空でない場合、301 ("Moved Permanently") リダイレクトで new_path にリダイレクトします。 RedirectFallbackMiddleware をサブクラス化し、 response_redirect_class を django.http.HttpResponseRedirect に設定して、 302 Moved Temporarily リダイレクトを代わりに使用できます。
一致するものが見つかり、 new_path が空であれば、410 ("Gone") HTTPヘッダーと空の (content-less) レスポンスを送信します。
マッチするものが見つからない場合は、リクエストは通常通り処理されます。
ミドルウェアは、404 エラーにのみアクティブ化され、500 エラーや他のステータスコードのレスポンスには適用されません。
MIDDLEWARE の順番は重要であることに注意してください。一般的に、 RedirectFallbackMiddleware をリストの最後に置くべきです。それは最終手段として機能します。
ミドルウェアについての詳細は ミドルウェアのドキュメント を参照してください。
Django の自動管理インターフェイスを有効にしていれば、管理インデックスページに "Redirects" セクションがあるはずです。システムの他のオブジェクトを編集するように、リダイレクトを編集してください。
リダイレクトは標準の Django モデル で表現され、 django/contrib/redirects/models.py にあります。 リダイレクトオブジェクトには、DjangoデータベースAPI を経由してアクセスできます。たとえば:
>>> from django.conf import settings
>>> from django.contrib.redirects.models import Redirect
>>> # Add a new redirect.
>>> redirect = Redirect.objects.create(
... site_id=1,
... old_path="/contact-us/",
... new_path="/contact/",
... )
>>> # Change a redirect.
>>> redirect.new_path = "/contact-details/"
>>> redirect.save()
>>> redirect
<Redirect: /contact-us/ ---> /contact-details/>
>>> # Delete a redirect.
>>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete()
(1, {'redirects.Redirect': 1})
ミドルウェアが使用する HttpResponse クラスは、 RedirectFallbackMiddleware のサブクラスを作成し、 response_gone_class や response_redirect_class をオーバーライドすることで変更できます。
要求されたパスが見つからないか、new_path に空の値が含まれている時に、 Redirect が見つからないときに使用される HttpResponse クラス。
デフォルトは HttpResponseGone です。
リダイレクトを処理する HttpResponse クラス。
デフォルトは HttpResponsePermanentRedirect です。
4月 02, 2025