841-biborokuWebフロントエンドの備忘録

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 のエラーが発生