Cloudflareのバルクリダイレクト機能がリリースされました!

2022.01.05

どうも、ベルリンオフィスの小西です。

Cloudflareでバルクリダイレクト機能(Beta)がリリースされました!

Cloudflareのダッシュボード もしくは APIから、リダイレクトリストを一括で登録できるようになり、コンテンツ移行などが便利になりました。

以前に別記事で紹介したWorkersで行う方法よりも簡単に設定できるため、URL数とプランに応じて、本記事で紹介する方法を是非検討してみてください。

設定の流れ

1. リストの作成

まずはダッシュボードからリストの作成を行います。リスト作成を行ったのみではサイトに適用されないのでご安心ください(次に紹介するルールの作成が必要)。

Manage Account > Configurations > Lists > Create new list

↓新規でリストを作成します。

Cloudflare bulk redirect

↓[Content Type]として[Redirect]を選択します。

Cloudflare bulk redirect

下記情報を入力し、リスト作成を行います。

  • Source URL: リダイレクトのURLを入力する
    • URLにプロトコル(HTTP or HTTPS)が指定されていない場合、どちらも適用されます
  • Target URL: リダイレクトのURLを入力する
  • Status ... ステータスコードを選択します。URLごとに、301, 302, 307, 308から選択できます。
  • Edit parameters ... オプションを設定することで(ある程度)動的なリダイレクト設定ができます。説明は後述します。

Cloudflare bulk redirect

なお、手動での設定だけでなく、CSVによる一括アップロードも可能です。

2. ルールの設定

先ほど作成したリストを有効化します。

Buld Redirects > Create Bulk Redirects

Cloudflare bulk redirect

↓先ほど作成したリストを紐付けます。 Cloudflare bulk redirect

上記のルール設定が完了すると、自分のCloudflareアカウント配下のサイト全てにリダイレクトが適用されますが、次に紹介する適用ルールカスタマイズで条件指定が可能です。

適用ルールのカスタマイズ(式の設定)

ルールが適用される詳細な条件を設定できます。

デフォルトでは http.request.full_uri in $<リダイレクトリスト名> の式が適用されており、この状態ではリクエストURLが、紐づけたリスト内に存在する場合にリダイレクトが行われます

この式を、例えば ip.src.country == "GB" and http.request.full_uri in $<リダイレクトリスト名> とすると、UKから来たリクエスト、かつリクエストURLがリストに存在する場合にリダイレクトが行われるようになります。

その他にも式ビルダーを使って条件設定が可能です。リファラやIP、UA、 X-Forwarded-Forのヘッダー等を条件として指定できます。

Cloudflare bulk redirect

設定可能なオプション

また、記事執筆時点では静的なリダイレクトのみに対応していますが、リスト作成時に下記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の後ろになります。 cloudflare bulk redirect 参考ドキュメント

料金体系

プランによって登録できる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

参考

https://developers.cloudflare.com/rules/bulk-redirects