Redirect Rules
今日はこちらで触れたRedirect Rulesを触っていきます。
Redirect Rules とは
リクエストしたブラウザをオリジナルのソースURLから特定の HTTP ステータス コードを持つターゲット URL に移動します。CloudflareのRedirectは大きく4つの手法があります。
- Single Redirect
個別URL毎に設定する方式です。一律で特定の条件に合致した(IPアドレスにより判別される国など)場合のみリダイレクトを行う静的リダイレクトとクエリ文字列の操作が可能な動的リダイレクトの2種類があります。 - Bulk Redirect
一括でファイル登録を行うことにより、大量のリダイレクトを設定できます。 - Snippets
https://zenn.dev/kameoncloud/articles/89baddeed1bd1d
でまとめたように簡単なスクリプトを実行可能です。ここにアプリケーション独自ロジックを組み込むことができます。 - Workers
Workersを使うことで永続性のあるストレージやデータベースへのアクセスが可能となり、さらに複雑なリダイレクトを実現可能です。
さっそくやってみる
この記事では、Single Redirectを試してみます。
いつも通りこの記事を参考にOriginを構築しCloudflare経由でのアクセスが行えるようにします。https://zenn.dev/kameoncloud/articles/6d2dec59232917
ただ、今日はリダイレクトをさせますので、別にアクセス可能なオリジンである必要はないので例えば以下のような、実際に存在していないオリジンでも問題ありません。
Rules
→Redirect Rules
をクリックします。
Create Rule
をクリックします。
適当な名前を付けた後all incoming requests
を選択します。
Type
にStatic
を選択します。
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}")
ここにいくつかのサンプルがまとまっていますので参考にしてください。
Discussion