Cloudflareのリダイレクトルールを試してみる

はじめに

Webサイトを運用していると、URLの変更やページの移転に伴ってリダイレクトが必要になることがある。
.htaccessやサーバー側の設定でリダイレクトを実装していたが、Cloudflareを使用している場合はリダイレクトルール機能を使うことで、サーバー側の設定を変更せずに簡単にリダイレクトを設定できる。

Cloudflareのリダイレクトルールには以下の利点がある

  • リダイレクト処理がCloudflareのエッジで行われるため、オリジンサーバーに負荷がかからない
  • エッジサーバーで処理されるため、応答速度が向上する
  • URLパス、クエリパラメータ、ホスト名など様々な条件でリダイレクトを制御できる
  • Cloudflareのダッシュボードから設定・変更が可能

今回は、実際にCloudflareのリダイレクトルールを使って、いくつかの基本的なリダイレクトパターンを試してみる。

環境

Cloudflare (Freeプラン)
独自ドメイン(Cloudflareで管理)

Cloudflareリダイレクトルールとは

Cloudflareのリダイレクトルールは、特定の条件に一致するリクエストを別のURLにリダイレクトする機能である。
エッジサーバー(Cloudflareのネットワーク)でリダイレクト処理が行われるため、オリジンサーバーへのリクエストが発生しない。

リダイレクトルールの種類

Cloudflareでは主に以下の2種類のリダイレクトが利用できる

種類ステータスコード用途SEOへの影響
一時的なリダイレクト302 Found一時的なURL変更、メンテナンス時の別ページへの誘導検索エンジンは元のURLを保持する
恒久的なリダイレクト301 Moved Permanently恒久的なURL変更、サイトリニューアル検索エンジンは新しいURLにインデックスを移行する

料金プラン別の制限

プランリダイレクトルール数月間リクエスト数
Free10ルール制限なし
Pro25ルール制限なし
Business50ルール制限なし
Enterpriseカスタム制限なし

実際にやってみる

Cloudflareダッシュボードにアクセス

Cloudflareダッシュボードにログイン

cloudflare-redirect-rule-01

リダイレクトルールを設定したいドメインを選択

cloudflare-redirect-rule-02

ルールを作成する

ルール概要 を選択する

cloudflare-redirect-rule-03

ルールを作成 を選択する

cloudflare-redirect-rule-04

リダイレクトルール を選択する

cloudflare-redirect-rule-05

リダイレクトルールを作成する

リダイレクトルールの作成画面では、以下の項目を設定する

ルール名

ルールを識別するためのわかりやすい名前を付ける。

例: 旧ブログURLから新ブログURLへのリダイレクト

条件(When incoming requests match…)

どのようなリクエストにリダイレクトを適用するかを定義する。

フィールド: リクエストのどの部分を評価するか

フィールド説明
URI PathURLのパス部分
URI Full完全なURL
Hostnameホスト名(ドメイン)
URI Query Stringクエリパラメータ
その他多数のフィールドが利用可能

演算子: 条件の比較方法

演算子説明
equals完全一致
contains含む
matches regex正規表現でマッチ
starts withで始まる
ends withで終わる

: マッチさせる具体的な値

リダイレクト先の設定(Then…)

リダイレクト先のURLとステータスコードを設定する。

項目説明
TypeDynamic(動的)またはStatic(静的)
URLリダイレクト先のURL
Status code301(恒久的)または302(一時的)
Preserve query stringクエリパラメータを保持するかどうか

設定した内容

今回は以下で設定した。

項目設定値
ルール名k-bushi.comからblog.k-bushi.comへのリダイレクト
受信リクエストが一致する場合…ワイルドカードパターン
リクエスト URLhttps://k-bushi.com/blog
ターゲット URLhttps://blog.k-bushi.com
ステータスコード301
cloudflare-redirect-rule-06

確認

設定できていることを確認

cloudflare-redirect-rule-07

curlで確認

curl -I https://k-bushi.com/blog
 ~  curl -I https://k-bushi.com/blog
HTTP/2 301
date: Sun, 02 Nov 2025 09:33:44 GMT
location: https://blog.k-bushi.com/
speculation-rules: "/cdn-cgi/speculation"
report-to: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=oBM2V61804vfhBpu0aBHHAADnRJ4ZfQKmyitSHKDtLnMBqz6OpdeUJGD7%2BYfe9qt%2BkeLXysiKWLR8Fbe%2Bc1nAttpt8YNoEIpnzlU"}]}
nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
server: cloudflare
cf-ray: 9982a1d24ac5f52f-NRT

Dynamic式について

Cloudflareのリダイレクトルールでは、Dynamic(動的)設定を使うことで柔軟なリダイレクトが可能になる。

よく使う関数一覧

関数説明使用例
concat()文字列を結合concat("https://", http.request.host)
substring()部分文字列を取得substring(http.request.uri.path, 5)
lower()小文字に変換lower(http.request.uri.path)
upper()大文字に変換upper(http.request.uri.path)
url_decode()URLデコードurl_decode(http.request.uri.query)
regex_replace()正規表現で置換regex_replace(http.request.uri.path, "^/old/", "/new/")

よく使うフィールド

フィールド説明
http.request.uri.pathURLパス/blog/post-1
http.request.uri完全なURI/blog/post-1?page=2
http.request.hostホスト名example.com
http.request.uri.queryクエリ文字列page=2&sort=date
http.request.uri.query_string["key"]特定のクエリパラメータ2

テスト

設定したリダイレクトルールが正しく動作するか確認する。

1. ブラウザで確認

シンプルにブラウザでURLにアクセスして、リダイレクトされることを確認する。

注意点

  • ブラウザのキャッシュをクリアしてからテスト
  • プライベートモード(シークレットモード)での確認をする

2. curlコマンドで確認

ターミナルからHTTPヘッダーを確認する。

# リダイレクトを追跡せずヘッダーのみ表示
curl -I https://example.com/old-blog

# 期待される出力
HTTP/2 301
location: https://example.com/blog
cf-cache-status: DYNAMIC
server: cloudflare
# リダイレクトを追跡して最終的な結果を確認
curl -L -I https://example.com/old-blog

3. オンラインツールで確認

Redirect Checker

https://httpstatus.io/

  • URLを入力するだけでリダイレクトチェーンを確認できる
  • ステータスコードやヘッダー情報も表示される

WhatsMyDNS

https://www.whatsmydns.net/

  • 世界中のDNSサーバーから名前解決を確認できる
  • Cloudflareの設定が反映されているか確認する

リダイレクトルールの優先順位

複数のリダイレクトルールを設定した場合、以下の優先順位で適用される

  1. リスト内での順序: 上にあるルールが優先
  2. 最初にマッチしたルール: 1つのルールがマッチすると、以降のルールは評価されない

優先順位の設定方法

ダッシュボードでルールをドラッグ&ドロップすることで順序を変更できる。 以下のようにするとよい。

  1. 最も具体的な条件のルール(完全一致など)
  2. 中程度の具体性のルール(前方一致など)
  3. 最も広範な条件のルール(すべてマッチなど)

1. URI Path equals /special-case → https://example.com/special
2. URI Path starts with /blog/ → https://example.com/posts/
3. Hostname equals old-domain.com → https://new-domain.com

この場合、/special-caseは1番目のルールでマッチするため、2番目のルールは適用されない。

注意するべきところ

1. リダイレクトループ

リダイレクト先が再度リダイレクトルールにマッチすると、無限ループが発生する。

NG例

ルール1: /old → /new
ルール2: /new → /old

2. 301と302のリダイレクト

  • 301(恒久的): URL構造の変更、サイトリニューアルなど永続的な変更
  • 302(一時的): メンテナンス、A/Bテスト、限定ページなど一時的な変更

3. クエリパラメータの保持

Preserve query stringをONにしないと、クエリパラメータが失われる。

発生しうるトラブル

リダイレクトが動作しない

原因解決方法
Cloudflareのプロキシ(オレンジ雲)がOFFになっているDNSレコードのプロキシをON(オレンジ雲)にする
ルールの条件が間違っている条件のフィールド、演算子、値を再確認
キャッシュが残っているブラウザのキャッシュをクリア、またはCloudflareのキャッシュをパージ

参考

おわりに

Cloudflareのリダイレクトルール機能を使用することで、サーバー側の設定を変更することなくリダイレクトを実装できた。

エッジサーバーでリダイレクト処理が行われるため、オリジンサーバーへの負荷がかからず、応答速度も向上する。
また、ダッシュボードから直感的に設定できるため、.htaccessの複雑な記述や設定ファイルの編集が不要になる点もよい。

Freeプランでも10ルールまで設定できるため、個人サイトや小規模サイトであれば十分に活用できる。
URL構造の変更、ドメイン移転、HTTPSへの強制リダイレクトなど、様々なシーンで活用できるなと思った。

Dynamic式を使うことで、パスの一部を保持したり、クエリパラメータを変換したりといった高度なリダイレクトも実現できる。

今後必要なことがあれば使っていきたい。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。