静的アセットを持つ Worker にカスタムリダイレクトを適用するには、拡張子なしのプレーンテキストファイル _redirects をプロジェクトの静的アセットディレクトリに置き、リダイレクトを宣言します。このファイル自体は静的アセットとして配信されません。Workers が解析し、その規則を静的アセットのレスポンスに適用します。
フレームワークを使っている場合、public/ や static/ という名前のディレクトリがあることが多く、ここには favicon、robots.txt、サイトマニフェストなど、デプロイ可能なアセットが入っています。これらのファイルはビルド時に最終出力ディレクトリへコピーされるため、_redirects ファイルを置く場所として適しています。フレームワークを使っていない場合は、_redirects ファイルを 静的アセットディレクトリ に直接置けます。
1 行につき定義できるリダイレクトは 1 つです。次の形式に従わない行は無視されます。
[source] [destination] [code?]-
sourcestringrequired- ファイルパスです。
- ワイルドカード(
*) と プレースホルダー を含められます。 - フラグメントは Cloudflare のネットワークではなくブラウザが評価するため、source 内のフラグメントは評価されません。
-
destinationstringrequired -
codenumber(default: 302) optional- 任意のパラメーターです。
# で始まる行はコメントとして扱われます。
_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 のドキュメント を参照してください。