---
title: "redirects （リダイレクト）アプリ"
version: 6.0
locale: ja
source: https://docs.djangoproject.com/ja/6.0/ref/contrib/redirects/
canonical: https://djangodocs.dev/ja/6.0/ref/contrib/redirects/
---
# redirects （リダイレクト）アプリ

Django にはオプションで redirects (リダイレクト) アプリケーションが付属しています。リダイレクトをデータベースに保存し、リダイレクトを処理します。デフォルトでは HTTP 応答ステータスコード `301 Moved Permanently` を使います。

## インストール

redirects アプリをインストールするには、以下の手順に従ってください:

1. `django.contrib.sites` フレームワークが [インストールされていること](/ja/6.0/ref/contrib/sites/#enabling-the-sites-framework) を確認してください。
2. `'django.contrib.redirects'` を [`INSTALLED_APPS`](/ja/6.0/ref/settings/#std-setting-INSTALLED_APPS) 設定に追加します。
3. [`MIDDLEWARE`](/ja/6.0/ref/settings/#std-setting-MIDDLEWARE) 設定に `'django.contrib.redirects.middleware.RedirectFallbackMiddleware'` を追加します。
4. コマンド [`manage.py migrate`](/ja/6.0/ref/django-admin/#django-admin-migrate) を実行します。

## しくみ

`manage.py migrate` はデータベースに `django_redirect` テーブルを作成します。これは、 `site_id`、 `old_path`、および `new_path` フィールドを持つルックアップテーブルです。

[`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) が全ての作業を担当しています。Djangoアプリケーションが404エラーを発生させるたびに、このミドルウェアは要求されたURLが最終手段としてリダイレクトデータベースをチェックします。具体的には、与えられた `old_path` とサイトIDが [`SITE_ID`](/ja/6.0/ref/settings/#std-setting-SITE_ID) 設定に対応するリダイレクトを確認します。

- 一致するものが見つかり、かつ `new_path` が空でない場合、301 ("Moved Permanently") リダイレクトで `new_path` にリダイレクトします。 [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) をサブクラス化し、 [`response_redirect_class`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class) を [`django.http.HttpResponseRedirect`](/ja/6.0/ref/request-response/#django.http.HttpResponseRedirect) に設定して、 `302 Moved Temporarily` リダイレクトを代わりに使用できます。
- 一致するものが見つかり、 `new_path` が空であれば、410 ("Gone") HTTPヘッダーと空の (content-less) レスポンスを送信します。
- マッチするものが見つからない場合は、リクエストは通常通り処理されます。

ミドルウェアは、404 エラーにのみアクティブ化され、500 エラーや他のステータスコードのレスポンスには適用されません。

[`MIDDLEWARE`](/ja/6.0/ref/settings/#std-setting-MIDDLEWARE) の順番は重要であることに注意してください。一般的に、 [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) をリストの最後に置くべきです。それは最終手段として機能します。

ミドルウェアについての詳細は [ミドルウェアのドキュメント](/ja/6.0/topics/http/middleware/) を参照してください。

## リダイレクトの追加、変更、削除方法

### admin インターフェイス経由

Django の自動管理インターフェイスを有効にしていれば、管理インデックスページに "Redirects" セクションがあるはずです。システムの他のオブジェクトを編集するように、リダイレクトを編集してください。

### Python API 経由

#### `class models.Redirect`

リダイレクトは標準の [Django モデル](/ja/6.0/topics/db/models/) で表現され、 [django/contrib/redirects/models.py](https://github.com/django/django/blob/stable/6.0.x/django/contrib/redirects/models.py) にあります。 リダイレクトオブジェクトには、[DjangoデータベースAPI](/ja/6.0/topics/db/queries/) を経由してアクセスできます。たとえば:

```pycon
>>> 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})
```

## ミドルウェア

#### `class middleware.RedirectFallbackMiddleware`

ミドルウェアが使用する [`HttpResponse`](/ja/6.0/ref/request-response/#django.http.HttpResponse) クラスは、 [`RedirectFallbackMiddleware`](#django.contrib.redirects.middleware.RedirectFallbackMiddleware) のサブクラスを作成し、 `response_gone_class` や `response_redirect_class` をオーバーライドすることで変更できます。

#### `response_gone_class`

要求されたパスが見つからないか、`new_path` に空の値が含まれている時に、 [`Redirect`](#django.contrib.redirects.models.Redirect) が見つからないときに使用される [`HttpResponse`](/ja/6.0/ref/request-response/#django.http.HttpResponse) クラス。

デフォルトは [`HttpResponseGone`](/ja/6.0/ref/request-response/#django.http.HttpResponseGone) です。

#### `response_redirect_class`

リダイレクトを処理する [`HttpResponse`](/ja/6.0/ref/request-response/#django.http.HttpResponse) クラス。

デフォルトは [`HttpResponsePermanentRedirect`](/ja/6.0/ref/request-response/#django.http.HttpResponsePermanentRedirect) です。
