💡

Redirect Rules

2024/08/05に公開

今日はこちらで触れたRedirect Rulesを触っていきます。
https://zenn.dev/kameoncloud/articles/0ea8889483d6c2

Redirect Rules とは

リクエストしたブラウザをオリジナルのソースURLから特定の HTTP ステータス コードを持つターゲット URL に移動します。CloudflareのRedirectは大きく4つの手法があります。

  1. Single Redirect
    個別URL毎に設定する方式です。一律で特定の条件に合致した(IPアドレスにより判別される国など)場合のみリダイレクトを行う静的リダイレクトとクエリ文字列の操作が可能な動的リダイレクトの2種類があります。
  2. Bulk Redirect
    一括でファイル登録を行うことにより、大量のリダイレクトを設定できます。
  3. Snippets
    https://zenn.dev/kameoncloud/articles/89baddeed1bd1d
    でまとめたように簡単なスクリプトを実行可能です。ここにアプリケーション独自ロジックを組み込むことができます。
  4. Workers
    Workersを使うことで永続性のあるストレージやデータベースへのアクセスが可能となり、さらに複雑なリダイレクトを実現可能です。

さっそくやってみる

この記事では、Single Redirectを試してみます。
いつも通りこの記事を参考にOriginを構築しCloudflare経由でのアクセスが行えるようにします。https://zenn.dev/kameoncloud/articles/6d2dec59232917
ただ、今日はリダイレクトをさせますので、別にアクセス可能なオリジンである必要はないので例えば以下のような、実際に存在していないオリジンでも問題ありません。

RulesRedirect Rulesをクリックします。

Create Ruleをクリックします。

適当な名前を付けた後all incoming requestsを選択します。

TypeStaticを選択します。
URLにリダイレクトさせたいURLを入力します。
Status Codeを選びます。


一般的には301 Moved Permanently を用いますが、例えばメンテナンスなどで一時的なリダイレクトの場合302 Foundを用います。この場合例えばGoogleの検索エンジンボットなどはオリジナルのURLを記憶したままになります。またリダイレクトさせつつ旧URLについてCDNがキャッシュしているコンテンツを強制的に用いる場合は304 Not Modifiedを用います。ただしCloudflareではキャッシュは自動で選択されますので、304は指定できません。
一旦301でDeployをクリックします。ウェブサイトにアクセスすると無事リダイレクトされるはずです。デベロッパーツールでHTTPステータスコードを見てみると、まず301によりリダイレクトされたのち、リダイレクト後のサイトで200が戻っていることがわかります。

以下のように設定すると日本からのアクセスの場合のみ、日本専用ページへリダイレクトされます。

このチェックではリダイレクト時にオリジナルのクエリーストリングを保持するかどうかを選択可能です。

Dynamic Redirect

こちらはクエリ文字列の維持だけではなく操作が可能になります。
例えばlower(concat("https://", ip.geoip.country, ".example.com"))と設定した場合、アクセス元の国IPアドレスから判別しjpであれば
jp.example.comへリダイレクトさせます。アメリカの場合us.example.comになります。

アプリケーションの改修により/en-us/<page_name>へのアクセスを一括で/<page_name>に変更したい場合、以下になります。
regex_replace(http.request.uri.path, "^/[A-Za-z]{2}-[A-Za-z]{2}/(.*)", "/${1}")

https://developers.cloudflare.com/rules/url-forwarding/examples/
ここにいくつかのサンプルがまとまっていますので参考にしてください。

Discussion