From bac39dcba2d6c311beb0491cba7ea997ec7721ba Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sun, 1 Oct 2023 19:50:43 +0900 Subject: [PATCH] =?UTF-8?q?2023/04/11=20=E6=99=82=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=90=8C=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/ja/web/http/redirections/index.md | 50 +++++++++++++------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/files/ja/web/http/redirections/index.md b/files/ja/web/http/redirections/index.md index 40ff9f4e94cbfe..049bca1c87cbb7 100644 --- a/files/ja/web/http/redirections/index.md +++ b/files/ja/web/http/redirections/index.md @@ -1,11 +1,13 @@ --- title: HTTP のリダイレクト slug: Web/HTTP/Redirections +l10n: + sourceCommit: 0880a90f3811475d78bc4b2c344eb4146f25f66c --- {{HTTPSidebar}} -*URL リダイレクト*は、 *URL 転送*とも呼ばれ、ページ、フォーム、ウェブアプリケーション全体などに二つ以上の URL のアドレスを与える技術です。 HTTP ではこの操作のために、特別な種類のレスポンスである **_HTTP リダイレクト_**を提供しています。 +**URL リダイレクト**は、 *URL 転送*とも呼ばれ、ページ、フォーム、ウェブサイト全体、ウェブアプリケーションなどに 2 つ以上の URL のアドレスを与える技術です。 HTTP ではこの操作のために、特別な種類のレスポンスである **_HTTP リダイレクト_**を提供しています。 リダイレクトには多くの目的があります。 @@ -18,13 +20,13 @@ HTTP では、リダイレクトはリクエストに対して、サーバーが ブラウザーがリダイレクトを受け取ると、 `Location` ヘッダーで提供された新たな URL を使用して直ちに読み込みを行います。追加の往復によるパフォーマンスの低下の他に、ユーザーがリダイレクトに気づくことはほとんどありません。 -![](httpredirect.png) +![最初のリクエストはクライアントからサーバーに送られます。サーバーはリダイレクト先のURLとともに 301:moved permanently で応答します。クライアントは新しい URL への GET リクエストを行い、サーバーは 200 OK レスポンスでこれを返します。](httpredirect.png) -リダイレクトには何種類かがありますが、3 つのカテゴリに分類することができます。 +リダイレクトには何種類かがありますが、3 つのカテゴリーに分類することができます。 -1. [恒久的リダイレクト](#Permanent_redirections) -2. [一時的リダイレクト](#Temporary_redirections) -3. [特殊リダイレクト](#Special_redirections) +1. [恒久的リダイレクト](#恒久的リダイレクト) +2. [一時的リダイレクト](#一時的リダイレクト) +3. [特殊リダイレクト](#特殊リダイレクト) ### 恒久的リダイレクト @@ -32,7 +34,7 @@ HTTP では、リダイレクトはリクエストに対して、サーバーが | コード | テキスト | メソッドの扱い | 主な使用例 | | ------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | -| `301` | `Moved Permanently` | {{HTTPMethod("GET")}} メソッドは変更しません。 他のメソッドは {{HTTPMethod("GET")}} に変更されるかもしれません。[\[1\]](#attr1) | ウェブサイトの再編。 | +| `301` | `Moved Permanently` | {{HTTPMethod("GET")}} メソッドは変更しません。 他のメソッドは {{HTTPMethod("GET")}} に変更されるかもしれません。[1] | ウェブサイトの再編。 | | `308` | `Permanent Redirect` | メソッドや本文は変更しません。 | GET 以外のリンクや操作を含むウェブサイトの再編。 | \[1] 仕様書ではメソッドの変更を意図していませんが、メソッドを変更するユーザーエージェントが存在します。 {{HTTPStatus("308")}} が定義されたのは、 `GET` 以外のメソッドを使用するときの動作のあいまいさをなくすためです。 @@ -45,7 +47,7 @@ HTTP では、リダイレクトはリクエストに対して、サーバーが | コード | テキスト | メソッドの扱い | 主な使用例 | | ------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `302` | `Found` | {{HTTPMethod("GET")}} メソッドは変更しません。 他のメソッドは {{HTTPMethod("GET")}} に変更されるかもしれません。[\[2\]](#attr2) | ウェブページは不測の理由により、一時的に利用できない状態です。 | +| `302` | `Found` | {{HTTPMethod("GET")}} メソッドは変更しません。 他のメソッドは {{HTTPMethod("GET")}} に変更されるかもしれません。[2] | ウェブページは不測の理由により、一時的に利用できない状態です。 | | `303` | `See Other` | {{HTTPMethod("GET")}} メソッドは変更しません。 他のメソッドは `GET` に*変更します* (本文は失われます)。 | ページの再読み込みによって操作が再度実施されることを防ぐために、{{HTTPMethod("PUT")}} や {{HTTPMethod("POST")}} の後のリダイレクトで使用します。 | | `307` | `Temporary Redirect` | メソッドと本文は変更しません。 | ウェブページは不測の理由により、一時的に使用できない状態です。検索エンジンは自身のリンクを更新しません。 `302` と比較して、サイトで `GET` 以外の操作を使用できる場合に推奨されます。 | @@ -53,7 +55,7 @@ HTTP では、リダイレクトはリクエストに対して、サーバーが ### 特殊リダイレクト -{{HTTPStatus("304")}} (Not Modified) は、ページをローカルにキャッシュした (陳腐化した) 複製へリダイレクトします。また {{HTTPStatus("300")}} (Multiple Choice) は、手動リダイレクトです。ブラウザーがウェブページとして表示する本文には使用可能なリダイレクトのリストがあり、ユーザーはひとつ選択してクリックします。 +{{HTTPStatus("304")}} (Not Modified) は、ページをローカルにキャッシュした(陳腐化した)複製へリダイレクトします。また {{HTTPStatus("300")}} (Multiple Choice) は、手動リダイレクトです。ブラウザーがウェブページとして表示する本文には使用可能なリダイレクトのリストがあり、ユーザーはひとつ選択してクリックします。 | コード | テキスト | 主な使用例 | | ------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -62,14 +64,14 @@ HTTP では、リダイレクトはリクエストに対して、サーバーが ## リダイレクトを指定する代替手段 -HTTP リダイレクトは、リダイレクトを定義する唯一の手段ではありません。他にも二つの方法があります。 +HTTP リダイレクトは、リダイレクトを定義する唯一の手段ではありません。他にも 2 つの方法があります。 1. {{HTMLElement("meta")}} 要素を使用する HTML リダイレクト 2. [DOM](/ja/docs/Web/API/Document_Object_Model) による JavaScript リダイレクト ### HTML リダイレクト -HTTP リダイレクトはリダイレクトを作成するための最良の方法ですが、サーバーの制御権を持っていない場合もあります。このような場合は、そのページの {{HTMLElement("head")}} 内に [`http-equiv`](/ja/docs/Web/HTML/Element/meta#http-equiv) 属性に `Refresh` を設定した {{HTMLElement("meta")}} 要素を記述してみてください。ページを表示すると、ブラウザーは示されたページへ移動します。 +HTTP リダイレクトはリダイレクトを作成するための最良の方法ですが、サーバーの制御権を持っていない場合もあります。このような場合は、そのページの {{HTMLElement("head")}} 内に {{HTMLElement("meta")}} 要素を記述し、その [`http-equiv`](/ja/docs/Web/HTML/Element/meta#http-equiv) 属性に `Refresh` を設定してみてください。ページを表示すると、ブラウザーは示されたページへ移動します。 ```html @@ -113,7 +115,7 @@ HTML リダイレクトと同様にすべてのリソースでは動作できず - : よくある事例は、サイトが `www.example.com` ドメイン配下に存在しているとき、`example.com` からもアクセスできるようにしたい場合です。この場合は、`example.com` から `www.example.com` へのリダイレクトを設定します。また、一般的に使用される同義語や、ドメイン名の打ち間違いで頻度が多いものを提供してもよいでしょう。 - 別のドメインに移動するため - : 例えば、会社名が変わっても、既存のリンクやブックマークからも新しい会社名を見つけられるようにしたいでしょう。 -- [HTTPS](/ja/docs/Glossary/https) を強制するため +- [HTTPS](/ja/docs/Glossary/HTTPS) を強制するため - : `http://` 版のサイトへのリクエストを `https://` 版のサイトにリダイレクトします。 ### リンクの存続 @@ -122,7 +124,7 @@ HTML リダイレクトと同様にすべてのリソースでは動作できず 外部のリンクは貴重なユーザーを連れてきてくれるし、 SEO にも役立つため、リンクを壊したくはありません。よって、古い URL から新しい URL へのリダイレクトを設定します。 -> **メモ:** この手法は内部のリンクにも有効ですが、内部のリダイレクトは避けるようにしてください。リダイレクトは (追加の HTTP リクエストを行うため) 性能の負担がかなりあります。内部のリンクを修正することでこれを避けられるのであれば、リンクを修正してください。 +> **メモ:** この手法は内部のリンクにも有効ですが、内部のリダイレクトは避けるようにしてください。リダイレクトは(追加の HTTP リクエストを行うため)性能の負担がかなりあります。内部のリンクを修正することでこれを避けられるのであれば、リンクを修正してください。 ### 安全でないリクエストへの一時的なレスポンス @@ -134,7 +136,7 @@ HTML リダイレクトと同様にすべてのリソースでは動作できず ### 長いリクエストに対する一時的なレスポンス -{{HTTPHeader("DELETE")}} リクエストを後で処理するように予定するなど、リクエストによってはサーバー側で長い時間が必要になる場合があります。この場合、レスポンスを {{HTTPStatus("303")}} (See Other) として操作が実行予定に追加されたことを示すページにリンクし、最終的に進捗を確認したり、キャンセルできるようにしたりするようにします。 +{{HTTPMethod("DELETE")}} リクエストを後で処理するように予定するなど、リクエストによってはサーバー側で長い時間が必要になる場合があります。この場合、レスポンスを {{HTTPStatus("303")}} (See Other) として操作が実行予定に追加されたことを示すページにリンクし、最終的に進捗を確認したり、キャンセルできるようにしたりするようにします。 ## 一般的なサーバーにおけるリダイレクトの設定 @@ -142,9 +144,9 @@ HTML リダイレクトと同様にすべてのリソースでは動作できず リダイレクトはサーバーの設定ファイルか、各ディレクトリの `.htaccess` で設定できます。 -[`mod_alias`](https://httpd.apache.org/docs/current/mod/mod_alias.html) モジュールに、 (既定で) {{HTTPStatus("302")}} レスポンスを設定するための `Redirect` および `RedirectMatch` ディレクティブがあります。 +[`mod_alias`](https://httpd.apache.org/docs/current/mod/mod_alias.html) モジュールには `Redirect` および `RedirectMatch` ディレクティブがあり、これらは既定で {{HTTPStatus("302")}} レスポンスを設定します。 -``` +```xml ServerName example.com Redirect / https://www.example.com @@ -155,7 +157,7 @@ URL `https://example.com/` は `https://www.example.com/` にリダイレクト `RedirectMatch` も同じですが、対象の URL の集合を定義するために{{glossary("regular expression", "正規表現")}}を使用します。 -``` +```plain RedirectMatch ^/images/(.*)$ https://images.example.com/$1 ``` @@ -163,19 +165,19 @@ RedirectMatch ^/images/(.*)$ https://images.example.com/$1 一時的なリダイレクトを設定したくない場合は、別の種類のリダイレクトを設定するために追加引数 (使用する HTTP ステータスコードまたは `permanent` キーワード) を使用できます。 -``` +```plain Redirect permanent / https://www.example.com # …acts the same as: Redirect 301 / https://www.example.com ``` -[`mod_rewrite`](http://httpd.apache.org/docs/current/mod/mod_rewrite.html) モジュールでリダイレクトを作成することもできます。こちらはさらに柔軟性がありますが、若干複雑です。 +[`mod_rewrite`](https://httpd.apache.org/docs/current/mod/mod_rewrite.html) モジュールでリダイレクトを作成することもできます。こちらはさらに柔軟性がありますが、若干複雑です。 ### Nginx Nginx では、リダイレクトしたいコンテンツ用の server ブロックを作成します。 -``` +```plain server { listen 80; server_name example.com; @@ -185,14 +187,14 @@ server { ディレクトリまたは特定のページにのみリダイレクトを適用するには、`rewrite` ディレクティブを使用します。 -``` +```plain rewrite ^/images/(.*)$ https://images.example.com/$1 redirect; rewrite ^/images/(.*)$ https://images.example.com/$1 permanent; ``` ### IIS -IIS では、[``](https://www.iis.net/configreference/system.webserver/httpredirect) 要素を使用してリダイレクトを設定します。 +IIS では、[``](https://docs.microsoft.com/iis/configuration/system.webServer/httpRedirect/) 要素を使用してリダイレクトを設定します。 ## リダイレクトループ @@ -202,7 +204,7 @@ IIS では、[``](https://www.iis.net/configreference/system.webse 時々、サーバーがリダイレクトループを検出しないことがあります。それぞれのサーバーでは全貌を把握できない、複数のサーバーにわたるリダイレクトループがあり得ます。この場合はブラウザーがループを検出して、エラーメッセージを表示するでしょう。Firefox では以下のメッセージを表示します。 -> このアドレスへのリクエストに対するサーバーの自動転送設定がループしています。 +> Firefox は、サーバーがこのアドレスへのリクエストを決して終了しない方法でリダイレクトしていることを検出しました。 Chrome では以下のように表示されます。 @@ -210,4 +212,4 @@ Chrome では以下のように表示されます。 どちらの場合も、ユーザーができることはほとんどありません (キャッシュや Cookie の不一致など、ユーザー側で問題が発生している場合を除きます)。 -リダイレクトループはユーザー体験を完全に損ないますので、避けることが重要です。 +リダイレクトループは使い勝手をを完全に損ないますので、避けることが重要です。