CloudflareのPage Rules機能を使ってwwwなしURLへ転送する方法
公開日:
最終更新日:
はじめに
このブログはCloudflare Pagesを使って、Cloudflare Registrarで管理しているokayurisotto.net
というドメインでデプロイされています。このとき、www.okayurisotto.net
へのアクセスを、www
なしのURLへ転送させてみたいと思いました。調べてみるとこういった設定はPage Rules機能で実現可能なようでした。この記事では、その方法について簡単にまとめます。
Cloudflare Registrarについて
Cloudflare Registrarとは、Cloudflareによるドメインレジストラです。
Cloudflare Registrarでドメインを取得したり、他のレジストラで取得したドメインを移管したりできます。
www
なしのURLへの転送の設定は、Cloudflare上で管理しているドメインに対して行えます。完全な移管はせずとも、ネームサーバーとしてCloudflareを使うようにドメインのDNS設定を変更しておけば可能だとは思いますが、未確認です。
Cloudflare Pagesについて
Cloudflare Pagesとは、静的サイトのデプロイができるCloudflareのサービスです。
似たようなサービスとしてはGitHub PagesやVercelなどがあります。
Cloudflare Pagesでは、example.pages.dev
というドメインがプロジェクトごとに割り当てられ、そのドメインでサイトが公開されます。カスタムドメインでサイトを公開するときは、そのカスタムドメインのDNSレコード(CNAME)を編集してこの割り当てられたドメインを指し示すようにするようです。
CNAME Flatteningについて
このサイトはokayurisotto.net
で公開されています。つまりokayurisotto.net
がexample.pages.dev
を指し示すようなDNSレコード(CNAME)が設定されています。
……と言いたいところなのですが、それは不可能です。okayurisotto.net
とはAPEXドメインと呼ばれるものであり、CNAMEなDNSレコードを設定しようにも技術的制約があるのです。私自身よく理解できていないので詳しくは各々で調べてもらいたいのですが……APEXドメインにはNSレコードを設定する必要があるが、CNAMEレコードはNSレコードなどと同時には存在できず、それゆえAPEXドメインにはCNAMEレコードが設定できない……ということらしいです。
この技術的制約を回避する機能がCloudflareには存在します。それがCNAME Flatteningです。
CNAME flattening speeds up CNAME resolution and allows you to use a CNAME record at your root/apex domain (example.com).
CNAME解決を高速化するためにフラット化する機能で、APEXドメインでもCNAMEレコードが擬似的に使えるようになる効果もある……というように私は読みましたが、自信がありません。
とりあえず、この機能のおかげで私のような初心者も直感的にDNSレコードを設定することができるようになっています。実際、Cloudflare Pagesをカスタムドメインで公開するにあたって、これらの技術を完全に理解する必要はありませんでした。ありがたいですね!
Page Rulesについて
ここからが本題です。Cloudflare Pagesを使ってokayurisotto.net
で静的サイトを公開することはできましたが、私は、www.okayurisotto.net
を適切にokayurisotto.net
へ転送したいのでした。これをするには、Page Rulesという機能を使います。
Page Rules機能はURLパターンに応じて行うアクションを設定できる汎用的な機能で、今回の目的である転送だけでなく、キャッシュの挙動やBotによるアクセスの拒否なども設定できます。
www
ありのURLをwww
なしのURLへと転送するルールはとても簡単に設定できます。ルールの新規作成画面で、URLとしてwww.okayurisotto.net/*
と書き、301 - Permanent Redirect
なForwarding URL
を選択し、destination URLとしてhttps://okayurisotto.net/$1
と書くだけです。このとき、destination URLの$1
にはワイルドカードにマッチした文字列が入ります。
しかしこのルール設定をしただけでは、私の環境ではうまく動作しませんでした。いろいろ試してみたところ、www.okayurisotto.net
へのアクセスを引き受けるようなDNSレコードが設定されていないことが原因でした。調べてみても情報がなく理解できていないのですが、適当にwww.okayurisotto.net
からexample.pages.dev
へのCNAMEレコードを設定すると、www
ありURLがwww
なしURLに転送されるようになりました。
おわりに
CloudflareのPage Rules機能を使ったwww
ありURLのwww
なしURLへの転送についてまとめました。このあたりの技術に詳しい人がいたら逆に教えていただきたいくらいの理解度で申し訳ないです……。
私の連絡先はこのページに書かれていますので、何かありましたらどうかよろしくお願いします。