Cloudflareのバルクリダイレクト機能がリリースされました!
どうも、ベルリンオフィスの小西です。
Cloudflareでバルクリダイレクト機能(Beta)がリリースされました!
Cloudflareのダッシュボード もしくは APIから、リダイレクトリストを一括で登録できるようになり、コンテンツ移行などが便利になりました。
以前に別記事で紹介したWorkersで行う方法よりも簡単に設定できるため、URL数とプランに応じて、本記事で紹介する方法を是非検討してみてください。
設定の流れ
1. リストの作成
まずはダッシュボードからリストの作成を行います。リスト作成を行ったのみではサイトに適用されないのでご安心ください(次に紹介するルールの作成が必要)。
Manage Account > Configurations > Lists > Create new list
↓新規でリストを作成します。
↓[Content Type]として[Redirect]を選択します。
下記情報を入力し、リスト作成を行います。
- Source URL: リダイレクト元のURLを入力する
- URLにプロトコル(HTTP or HTTPS)が指定されていない場合、どちらも適用されます
- Target URL: リダイレクト先のURLを入力する
- Status ... ステータスコードを選択します。URLごとに、
301
,302
,307
,308
から選択できます。 - Edit parameters ... オプションを設定することで(ある程度)動的なリダイレクト設定ができます。説明は後述します。
なお、手動での設定だけでなく、CSVによる一括アップロードも可能です。
2. ルールの設定
先ほど作成したリストを有効化します。
Buld Redirects > Create Bulk Redirects
上記のルール設定が完了すると、自分のCloudflareアカウント配下のサイト全てにリダイレクトが適用されますが、次に紹介する適用ルールカスタマイズで条件指定が可能です。
適用ルールのカスタマイズ(式の設定)
ルールが適用される詳細な条件を設定できます。
デフォルトでは http.request.full_uri in $<リダイレクトリスト名>
の式が適用されており、この状態ではリクエストURLが、紐づけたリスト内に存在する場合にリダイレクトが行われます。
この式を、例えば ip.src.country == "GB" and http.request.full_uri in $<リダイレクトリスト名>
とすると、UKから来たリクエスト、かつリクエストURLがリストに存在する場合にリダイレクトが行われるようになります。
その他にも式ビルダーを使って条件設定が可能です。リファラやIP、UA、 X-Forwarded-For
のヘッダー等を条件として指定できます。
設定可能なオプション
また、記事執筆時点では静的なリダイレクトのみに対応していますが、リスト作成時に下記4つのオプションを活用することで、記述URL数を節約することができます。
Preserve query string (デフォルト: false
)
本オプションが有効の場合、例えば http://example.com/about?q=term
へのリクエストは https://example.com/newpage?q=term
のようにパラメータを維持したままリダイレクトします。
Include subdomains (デフォルト: false
)
有効の場合、ホストネームのサブドメインでもリダイレクトが適用されます。
例えば、下記の設定がされているとします。
- Source URL:
https://example.com/about
- Target URL:
https://example.com/newpage
上記設定済みで、かつ本オプションが有効の場合、 http://a.example.com/about
や http://a.b.example.com/about
へのリクエストも同様にマッチするようになります。
Subpath matching (デフォルト: false
)
有効の場合、配下のパスも合わせてマッチするようになります。
例えばソースURLとして example.com/blog
というが設定されていたとしたら、 example.com/blog/foo
や example.com/blog/bar
へのリクエストも同様にマッチするようになります。
ただし、パスに17個以上のスラッシュ /
が存在する場合はマッチしなくなるので注意が必要です。
Preserve path suffix (デフォルト: true
)
“Subpath matching”オプションが有効の場合にのみ設定可能です。
有効の場合、サブパスが維持されるようになります。
例えば、下記の設定がされているとします。
- Source URL:
https://example.com/a/
- Target URL:
https://example.com/b/
この場合、 https://example.com/a/foo
へのアクセスは https://example.com/b/foo
へリダイレクトします。サブパスの /foo
は維持されています。
逆に無効の場合、マッチしたリクエストは https://example.com/b/
にリダイレクトするようになります。
APIによる登録
APIでリダイレクトリストを登録することも可能です。
リストの作成
curl -X POST \ "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/rules/lists" \ -H "X-Auth-Email: <EMAIL>" \ -H "X-Auth-Key: <KEY>" \ -d '{ "name": "my_redirect_list", "description": "My redirect list.", "kind": "redirect" }'
リストへの追加
curl -X POST \ "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/rules/lists/f848b6ccb07647749411f504d6f88794/items" \ -H "X-Auth-Email: <EMAIL>" \ -H "X-Auth-Key: <KEY>" \ -d '[ { "redirect": { "source_url": "example.com/blog/", "target_url": "https://example.com/blog/latest" } }, { "redirect": { "source_url": "example.net/", "target_url": "https://example.net/under-construction.html", "status_code": 307 } } ]'
ルールの追加
curl -X POST "https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/rulesets" \ -H "X-Auth-Key: <KEY>" \ -H "X-Auth-Email: <EMAIL>" \ -d '{ "name": "My redirect ruleset", "kind": "root", "phase": "http_request_redirect", "rules": [ { "expression": "http.request.full_uri in $my_redirect_list", "description": "Bulk Redirect rule.", "action": "redirect", "action_parameters": { "from_list": { "name": "my_redirect_list", "key": "http.request.full_uri" } } } ] }'
詳しくは https://developers.cloudflare.com/rules/bulk-redirects/create-api から。
ユースケース
以上の通り、リスト側、ルール側で詳細な条件設定が可能なため、様々なケースで利用可能です。
- 特定の国からのアクセスを特定のドメインにリダイレクトさせる
- HTTPからHTTPSにリダイレクトさせる
- 特定のディレクトリ配下のアクセスを全て他のURLにリダイレクトさせる
- 特定のディレクトリ名だけ書き換える(例:
/origin/aaa/
→/changed/aaa/
)
動的なリダイレクト
現状、静的なリダイレクトのみに対応しており、正規表現やワイルドカードには対応していません。
Bulk Redirects are essentially static — they do not support any string replacement operations or regular expressions.
動的なリダイレクトを行いたい場合、WorkersやRulesを使いましょう。
適用順序
Cloudflareではリクエストに対して複数レイヤーで処理を適用できますが、Bulk Redirectの適用順序としては、Firewallの後ろになります。 参考ドキュメント
料金体系
プランによって登録できるURL数に上限があります。
詳しくは 公式ドキュメント をご確認ください。
Property | Free | Pro | Business | Enterprise |
---|---|---|---|---|
Number of Edge Rules (includes Bulk Redirect Rules) |
15 | 15 | 15 | 50 |
Number of Bulk Redirect Lists | 5 | 5 | 5 | 25 |
Number of URL Redirects across lists | 20 | 500 | 500 | 10,000 |