リダイレクトアプリ
Djangoにはオプションのリダイレクトアプリケーションが付属しています。 リダイレクトをデータベースに保存し、リダイレクトを処理します。 デフォルトでは、HTTP応答ステータスコード301 Moved Permanently
を使用します。
インストール
リダイレクトアプリをインストールするには、次の手順に従います。
django.contrib.sites
フレームワークがインストールされていることを確認してください。'django.contrib.redirects'
を:setting: `INSTALLED_APPS` 設定に追加します。'django.contrib.redirects.middleware.RedirectFallbackMiddleware'
を:setting: `MIDDLEWARE` 設定に追加します。- コマンドを実行します :djadmin: `manage.py移行 ` 。
使い方
manage.py migrate
は、データベースにdjango_redirect
テーブルを作成します。 これは、site_id
、old_path
、およびnew_path
フィールドを持つルックアップテーブルです。
RedirectFallbackMiddleware がすべての作業を行います。 Djangoアプリケーションで404エラーが発生するたびに、このミドルウェアは、最後の手段として、リダイレクトデータベースで要求されたURLをチェックします。 具体的には、:setting: `SITE_ID` 設定に対応するサイトIDを持つ指定されたold_path
のリダイレクトをチェックします。
- 一致するものが見つかり、
new_path
が空でない場合、301(「永続的に移動」)リダイレクトを使用してnew_path
にリダイレクトします。 RedirectFallbackMiddleware をサブクラス化し、 response_redirect_class を django.http.HttpResponseRedirect に設定して、代わりに302 Moved Temporarily
リダイレクトを使用できます。 - 一致するものが見つかり、
new_path
が空の場合、410(「Gone」)HTTPヘッダーと空(コンテンツなし)の応答を送信します。 - 一致するものが見つからない場合、リクエストは通常どおり処理され続けます。
ミドルウェアは404秒間のみアクティブ化され、500秒間または他のステータスコードの応答に対してはアクティブ化されません。
:setting: `MIDDLEWARE` の順序が重要であることに注意してください。 通常、 RedirectFallbackMiddleware は最後の手段であるため、リストの最後に置くことができます。
ミドルウェアの詳細については、ミドルウェアドキュメントをお読みください。
リダイレクトを追加、変更、削除する方法
管理インターフェース経由
自動Django管理インターフェースをアクティブにした場合は、管理者インデックスページに「リダイレクト」セクションが表示されます。 システム内の他のオブジェクトを編集するときに、リダイレクトを編集します。
PythonAPI経由
- class models.Redirect
- リダイレクトは、:source: `django / contrib / redirects / models.py` にある標準の Djangoモデルで表されます。 DjangoデータベースAPI を介してリダイレクトオブジェクトにアクセスできます。
ミドルウェア
- class middleware.RedirectFallbackMiddleware
RedirectFallbackMiddleware のサブクラスを作成し、
response_gone_class
やresponse_redirect_class
をオーバーライドすることで、ミドルウェアで使用される HttpResponse クラスを変更できます。- response_gone_class
Redirect が要求されたパスで見つからないか、
new_path
値が空白の場合に使用される、 HttpResponse クラス。デフォルトは HttpResponseGone です。
- response_redirect_class
リダイレクトを処理する HttpResponse クラス。
デフォルトは HttpResponsePermanentRedirect です。