okayurisotto.net

私が好きでやったことが他の人のためにもなったらお得かも!

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 PagesVercelなどがあります。

Cloudflare Pagesでは、example.pages.devというドメインがプロジェクトごとに割り当てられ、そのドメインでサイトが公開されます。カスタムドメインでサイトを公開するときは、そのカスタムドメインのDNSレコード(CNAME)を編集してこの割り当てられたドメインを指し示すようにするようです。

CNAME Flatteningについて

このサイトはokayurisotto.netで公開されています。つまりokayurisotto.netexample.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 RedirectForwarding 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への転送についてまとめました。このあたりの技術に詳しい人がいたら逆に教えていただきたいくらいの理解度で申し訳ないです……。

私の連絡先はこのページに書かれていますので、何かありましたらどうかよろしくお願いします。