Cloudflare pagesのサイト内で_redirectsを使ったリダイレクトをする方法
よく使いそうリダイレクト設定をCloudflare Pagesのサイトに設定する方法を試しました。
検証したリダイレクトの条件は以下の通り
- 完全一致 /111/222/hoge/ → /111/222/333/hoge/
- 一部任意 /222/333/splat/ → /222/333/444/splat/
- 一部任意(複数) /333/444/main/sub/ → /333/444/555/main/sub/
_redirectsの作成
publicディレクトリに_redirects(拡張子なし)ファイルを作成します。
_redirectsの書き方
[source] [destination] [code?]
[リダイレクト元] [リダイレクト先] [転送処理のステータスコード]
- 無料プランでは、静的が2000件・動的が100件まで設定可能
- 静的>動的の順で指定する
公式ドキュメント:Cloudflare Redirects
完全一致のリダイレクト
/111/222/hoge/ → /111/222/333/hoge/
public/_redirects
/111/222/hoge/ /111/222/333/hoge/ 301
.htaccess
#.htaccessで書く場合
RewriteRule ^111/222/hoge/$ /111/222/333/hoge/ [R=301]
一部任意のリダイレクト
/222/333/splat/ → /222/333/444/splat/
任意の箇所に「:splat」を割り当てます。
「splat」の部分は変更が可能です。
public/_redirects
/222/333/:slug/ /222/333/444/:slug/ 301
.htaccess
#.htaccessで書く場合
RewriteRule ^222/333/(.*)/$ /222/333/444/$1/ [R=301]
一部任意(複数)のリダイレクト
/333/444/main/sub/ → /333/444/555/main/sub/
1つ目に「:main」、2つ目に「:sub」を割り当てます。
任意の箇所が複数ある場合は、割り当てる名称が重複しないようにします。
public/_redirects
/333/444/:main/:sub/ /333/444/555/:main/:sub/ 301
.htaccess
#.htaccessで書く場合
RewriteRule ^333/444/(.*)/(.*)/$ /333/444/555/$1/$2/ [R=301]
まとめ
:slug は任意(*の指定でも可能だけど、1つしか使用できないので、任意の文字列を使用する方がいい)
末尾の/は一致対象となる
/333/444/test の場合、リダイレクトは実行されない
/333/444/test/の場合、/333/444/555/test/にリダイレクトされる
失敗例
.htaccessのように$1で指定できるかと思い試したところ、正規表現のような形式はリダイレクトループが発生してしまいました。
/123/456/*/ /123/456/789/$1/ 301
ERRTOOMANY_REDIRECTS のエラーが発生