{"title":"redirects （リダイレクト）アプリ","version":"5.1","locale":"ja","docname":"ref/contrib/redirects","url":"/ja/5.1/ref/contrib/redirects/","canonical":"https://djangodocs.dev/ja/5.1/ref/contrib/redirects/","summary":"Django にはオプションで redirects (リダイレクト) アプリケーションが付属しています。リダイレクトをデータベースに保存し、リダイレクトを処理します。デフォルトでは HTTP 応答ステータスコード 301 Moved Permanently を使います。 インストール Link to this heading…","html":"<span id=\"the-redirects-app\"></span><h1>redirects （リダイレクト）アプリ<a class=\"heading-anchor\" href=\"#module-django.contrib.redirects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django にはオプションで redirects (リダイレクト) アプリケーションが付属しています。リダイレクトをデータベースに保存し、リダイレクトを処理します。デフォルトでは HTTP 応答ステータスコード <code class=\"docutils literal notranslate\"><span class=\"pre\">301</span> <span class=\"pre\">Moved</span> <span class=\"pre\">Permanently</span></code> を使います。</p>\n<section id=\"installation\">\n<h2>インストール<a class=\"heading-anchor\" href=\"#installation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>redirects アプリをインストールするには、以下の手順に従ってください:</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.sites</span></code> フレームワークが <a class=\"reference internal\" href=\"/ja/5.1/ref/contrib/sites/#enabling-the-sites-framework\"><span class=\"std std-ref\">インストールされていること</span></a> を確認してください。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.redirects'</span></code> を <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 設定に追加します。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 設定に <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.redirects.middleware.RedirectFallbackMiddleware'</span></code> を追加します。</p></li>\n<li><p>コマンド <a class=\"reference internal\" href=\"/ja/5.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code></a> を実行します。</p></li>\n</ol>\n</section>\n<section id=\"how-it-works\">\n<h2>しくみ<a class=\"heading-anchor\" href=\"#how-it-works\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">migrate</span></code> はデータベースに <code class=\"docutils literal notranslate\"><span class=\"pre\">django_redirect</span></code> テーブルを作成します。これは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">site_id</span></code>、 <code class=\"docutils literal notranslate\"><span class=\"pre\">old_path</span></code>、および <code class=\"docutils literal notranslate\"><span class=\"pre\">new_path</span></code> フィールドを持つルックアップテーブルです。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RedirectFallbackMiddleware</span></code></a> が全ての作業を担当しています。Djangoアプリケーションが404エラーを発生させるたびに、このミドルウェアは要求されたURLが最終手段としてリダイレクトデータベースをチェックします。具体的には、与えられた <code class=\"docutils literal notranslate\"><span class=\"pre\">old_path</span></code> とサイトIDが <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-SITE_ID\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">SITE_ID</span></code></a> 設定に対応するリダイレクトを確認します。</p>\n<ul class=\"simple\">\n<li><p>一致するものが見つかり、かつ <code class=\"docutils literal notranslate\"><span class=\"pre\">new_path</span></code> が空でない場合、301 (&quot;Moved Permanently&quot;) リダイレクトで <code class=\"docutils literal notranslate\"><span class=\"pre\">new_path</span></code> にリダイレクトします。 <a class=\"reference internal\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RedirectFallbackMiddleware</span></code></a> をサブクラス化し、 <a class=\"reference internal\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">response_redirect_class</span></code></a> を <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponseRedirect\" title=\"django.http.HttpResponseRedirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.http.HttpResponseRedirect</span></code></a> に設定して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">302</span> <span class=\"pre\">Moved</span> <span class=\"pre\">Temporarily</span></code> リダイレクトを代わりに使用できます。</p></li>\n<li><p>一致するものが見つかり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">new_path</span></code> が空であれば、410 (&quot;Gone&quot;) HTTPヘッダーと空の (content-less) レスポンスを送信します。</p></li>\n<li><p>マッチするものが見つからない場合は、リクエストは通常通り処理されます。</p></li>\n</ul>\n<p>ミドルウェアは、404 エラーにのみアクティブ化され、500 エラーや他のステータスコードのレスポンスには適用されません。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> の順番は重要であることに注意してください。一般的に、 <a class=\"reference internal\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RedirectFallbackMiddleware</span></code></a> をリストの最後に置くべきです。それは最終手段として機能します。</p>\n<p>ミドルウェアについての詳細は <a class=\"reference internal\" href=\"/ja/5.1/topics/http/middleware/\"><span class=\"doc\">ミドルウェアのドキュメント</span></a> を参照してください。</p>\n</section>\n<section id=\"how-to-add-change-and-delete-redirects\">\n<h2>リダイレクトの追加、変更、削除方法<a class=\"heading-anchor\" href=\"#how-to-add-change-and-delete-redirects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"via-the-admin-interface\">\n<h3>admin インターフェイス経由<a class=\"heading-anchor\" href=\"#via-the-admin-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django の自動管理インターフェイスを有効にしていれば、管理インデックスページに &quot;Redirects&quot; セクションがあるはずです。システムの他のオブジェクトを編集するように、リダイレクトを編集してください。</p>\n</section>\n<section id=\"via-the-python-api\">\n<h3>Python API 経由<a class=\"heading-anchor\" href=\"#via-the-python-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.redirects.models.Redirect\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">models.</span></span><span class=\"sig-name descname\"><span class=\"pre\">Redirect</span></span><a class=\"heading-anchor\" href=\"#django.contrib.redirects.models.Redirect\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>リダイレクトは標準の <a class=\"reference internal\" href=\"/ja/5.1/topics/db/models/\"><span class=\"doc\">Django モデル</span></a> で表現され、 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.1.x/django/contrib/redirects/models.py\">django/contrib/redirects/models.py</a> にあります。 リダイレクトオブジェクトには、<a class=\"reference internal\" href=\"/ja/5.1/topics/db/queries/\"><span class=\"doc\">DjangoデータベースAPI</span></a> を経由してアクセスできます。たとえば:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.redirects.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Redirect</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Add a new redirect.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">redirect</span> <span class=\"o\">=</span> <span class=\"n\">Redirect</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">site_id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">old_path</span><span class=\"o\">=</span><span class=\"s2\">&quot;/contact-us/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">new_path</span><span class=\"o\">=</span><span class=\"s2\">&quot;/contact/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Change a redirect.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">redirect</span><span class=\"o\">.</span><span class=\"n\">new_path</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;/contact-details/&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">redirect</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">redirect</span>\n<span class=\"go\">&lt;Redirect: /contact-us/ ---&gt; /contact-details/&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Delete a redirect.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Redirect</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">site_id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">old_path</span><span class=\"o\">=</span><span class=\"s2\">&quot;/contact-us/&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n<span class=\"go\">(1, {&#39;redirects.Redirect&#39;: 1})</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"middleware\">\n<h2>ミドルウェア<a class=\"heading-anchor\" href=\"#middleware\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">middleware.</span></span><span class=\"sig-name descname\"><span class=\"pre\">RedirectFallbackMiddleware</span></span><a class=\"heading-anchor\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ミドルウェアが使用する <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> クラスは、 <a class=\"reference internal\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware\" title=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RedirectFallbackMiddleware</span></code></a> のサブクラスを作成し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">response_gone_class</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">response_redirect_class</span></code> をオーバーライドすることで変更できます。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_gone_class\">\n<span class=\"sig-name descname\"><span class=\"pre\">response_gone_class</span></span><a class=\"heading-anchor\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_gone_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>要求されたパスが見つからないか、<code class=\"docutils literal notranslate\"><span class=\"pre\">new_path</span></code> に空の値が含まれている時に、 <a class=\"reference internal\" href=\"#django.contrib.redirects.models.Redirect\" title=\"django.contrib.redirects.models.Redirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Redirect</span></code></a> が見つからないときに使用される <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> クラス。</p>\n<p>デフォルトは <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponseGone\" title=\"django.http.HttpResponseGone\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponseGone</span></code></a> です。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class\">\n<span class=\"sig-name descname\"><span class=\"pre\">response_redirect_class</span></span><a class=\"heading-anchor\" href=\"#django.contrib.redirects.middleware.RedirectFallbackMiddleware.response_redirect_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>リダイレクトを処理する <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> クラス。</p>\n<p>デフォルトは <a class=\"reference internal\" href=\"/ja/5.1/ref/request-response/#django.http.HttpResponsePermanentRedirect\" title=\"django.http.HttpResponsePermanentRedirect\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponsePermanentRedirect</span></code></a> です。</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>","rootId":"module-django.contrib.redirects","toc":[{"title":"インストール","anchor":"installation","children":[]},{"title":"しくみ","anchor":"how-it-works","children":[]},{"title":"リダイレクトの追加、変更、削除方法","anchor":"how-to-add-change-and-delete-redirects","children":[{"title":"admin インターフェイス経由","anchor":"via-the-admin-interface","children":[]},{"title":"Python API 経由","anchor":"via-the-python-api","children":[]}]},{"title":"ミドルウェア","anchor":"middleware","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.1/ref/"},{"docname":"ref/contrib/index","title":"contrib パッケージ","url":"/ja/5.1/ref/contrib/"}],"prev":{"docname":"ref/contrib/postgres/validators","title":"バリデータ (Validator)","url":"/ja/5.1/ref/contrib/postgres/validators/"},"next":{"docname":"ref/contrib/sitemaps","title":"サイトマップ・フレームワーク","url":"/ja/5.1/ref/contrib/sitemaps/"},"formats":{"html":"/ja/5.1/ref/contrib/redirects/","markdown":"/ja/5.1/ref/contrib/redirects.md","json":"/ja/5.1/ref/contrib/redirects.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/contrib/redirects.txt","official":"https://docs.djangoproject.com/ja/5.1/ref/contrib/redirects/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}