Cloudflare Pages でカスタムリダイレクトを適用するには、拡張子なしのプレーンテキストファイル _redirects をプロジェクトの静的アセットディレクトリに置きます。このファイル自体は静的アセットとして配信されません。Cloudflare Pages が解析し、ルールを静的アセットのレスポンスに適用します。
フレームワークを使っている場合、public/ や static/ というディレクトリがあることが多く、ここには favicon、robots.txt、サイトマニフェストなど、デプロイ可能なアセットが入ります。これらのファイルはビルド時に最終的な出力ディレクトリへコピーされるため、_redirects ファイルを置くのに適しています。フレームワークを使っていない場合は、_redirects ファイルを ビルド出力ディレクトリ に直接置けます。
1 行に定義できるリダイレクトは 1 件です。次の形式に従わない行は無視されます。
[source] [destination] [code?]-
sourcestring必須- ファイルパスです。
- ワイルドカード(
*) と プレースホルダー を含められます。 - フラグメントはブラウザーが評価し、Cloudflare のネットワークでは評価されないため、source 内のフラグメントは評価されません。
-
destinationstring必須 -
codenumber(デフォルト: 302) 任意- 任意のパラメーターです。
# で始まる行はコメントとして扱います。
_redirects ファイルは、静的リダイレクト 2,000 件と動的リダイレクト 100 件、合計 2,100 件までです。各リダイレクト宣言は 1,000 文字までです。
_redirects ファイルでは次の点に注意します。
- リダイレクトの順序が重要です。同じ
sourceパスに複数のリダイレクトがある場合、いちばん上のリダイレクトが適用されます。 - 静的リダイレクトは動的リダイレクトより前に置きます。
- 受信リクエストに一致するアセットがあるかどうかに関係なく、リダイレクトは常に実行されます。
複数のリダイレクトを含む完全な例は次のとおりです。
/home301 / 301
/home302 / 302
/querystrings /?query=string 301
/twitch https://twitch.tv
/trailing /trailing/ 301
/notrailing/ /nottrailing 301
/page/ /page2/#fragment 301
/blog/* https://blog.my.domain/:splat
/products/:code/:name /products?code=:code&name=:nameCloudflare は現在、高度なリダイレクトを限定的にサポートしています。
| 機能 | 対応 | 例 | メモ |
|---|---|---|---|
| リダイレクト(301、302、303、307、308) | ✅ | /home / 301 |
デフォルトのステータスコードは 302 です。 |
| リライト(その他のステータスコード) | ❌ | /blog/* /blog/404.html 404 |
|
| スプラット | ✅ | /blog/* /posts/:splat |
スプラット を参照してください。 |
| プレースホルダー | ✅ | /blog/:year/:month/:date/:slug /news/:year/:month/:date/:slug |
プレースホルダー を参照してください。 |
| クエリパラメーター | ❌ | /shop id=:id /blog/:id 301 |
|
| プロキシ | ✅ | /blog/* /news/:splat 200 |
プロキシ を参照してください。 |
| ドメインレベルのリダイレクト | ❌ | workers.example.com/* workers.example.com/blog/:splat 301 |
|
| 国または言語によるリダイレクト | ❌ | / /us 302 Country=us |
|
| Cookie によるリダイレクト | ❌ | /\* /preview/:splat 302 Cookie=preview |
リダイレクトはヘッダーより先に実行されます。両方のファイルのルールに一致するリクエストでは、リダイレクトが優先されます。
照合時、スプラット(アスタリスク、*)はすべての文字に貪欲に一致します。URL に含められるスプラットは 1 つだけです。
一致した値は、リダイレクト先で :splat として使えます。
プレースホルダーは :placeholder_name で定義できます。コロン(:)のあとに英字が続くとプレースホルダーの開始です。続くプレースホルダー名は英数字とアンダースコアで構成します(:[A-Za-z]\w*)。名前付きプレースホルダーは、それぞれ 1 回だけ参照できます。プレースホルダーは区切り文字以外のすべての文字に一致します。ホストの一部である場合、区切り文字はピリオド(.)またはスラッシュ(/)です。パスの一部である場合は、スラッシュ(/)のみです。
同様に、一致した値は :placeholder_name を使い、redirect の値でも利用できます。
/movies/:title /media/:titleプロキシは、サイト上の相対 URL のみ対応しています。外部ドメインはプロキシできません。
ファイル内で適用されるのは最初のリダイレクトだけです。次の例では、/a へのリクエストは /b を、/b へのリクエストは /c をレンダリングします。ただし /a は /c をレンダリングしません。
/a /b 200
/b /c 200_redirects ファイルは、静的リダイレクト最大 2,000 件と動的リダイレクト最大 100 件、合計 2,100 件までです。_redirects の 2,100 件の制限を超えるリダイレクトは Bulk Redirects で扱います。
Bulk Redirects の使い方は、Bulk Redirects のダッシュボードドキュメント または Bulk Redirects API ドキュメント を参照してください。