コンテンツにスキップ

カスタムパスから画像を提供する

Transform Rulesを使用して、Imagesを通じて変換するすべての画像のURLを書き換えることができます。

このページでは、以下のシナリオの例を説明します。

  • カスタムパスから画像を提供する
  • 既存のURLをImagesでの変換に対応させるために修正する
  • あなたのゾーンで要求されたすべての画像をImagesを通じて変換する

ルールを作成するには、Cloudflareダッシュボードにログインし、アカウントとウェブサイトを選択します。次に、Rules > Transform Rulesを選択します。

始める前に

すべてのルールは、変換リクエストの前後で実行されます。

リクエストのパスが、サーバー上に保存されている元の画像のパスと一致する場合、元の画像を取得するリクエストがループする可能性があります。

リクエストをオリジンサーバーに向けるには、Viaヘッダーにimage-resizingという文字列が含まれているかを確認できます:

...and (not (any(http.request.headers["via"][*] contains "image-resizing")))

カスタムパスから画像を提供する

デフォルトでは、Imagesを通じて画像を変換するリクエストは/cdn-cgi/image/パスから提供されます。 Transform Rulesを使用してURLを書き換えることができます。

基本バージョン

FreeおよびProプランは、正規表現を必要としない文字列マッチングルールのみをサポートしています。

この例では、example.com/imagesからexample.com/cdn-cgi/image/へのリクエストを書き換えることができます:

Expression Editorのテキスト
(starts_with(http.request.uri.path, "/images")) and (not (any(http.request.headers["via"][*] contains "image-resizing")))
Path > Rewrite to... > Dynamicのテキスト
concat("/cdn-cgi/image", substring(http.request.uri.path, 7))

高度なバージョン

正規表現をサポートするTransform Rulesの高度なバージョンがあります。

この例では、example.com/imagesからexample.com/cdn-cgi/image/へのリクエストを書き換えることができます:

Expression Editorのテキスト
(http.request.uri.path matches "^/images/.*$") and (not (any(http.request.headers["via"][*] contains "image-resizing")))
Path > Rewrite to... > Dynamicのテキスト
regex_replace(http.request.uri.path, "^/images/", "/cdn-cgi/image/")

既存のURLをImagesでの変換に対応させるために修正する

この例では、URLパラメータをImagesに対応させるために書き換えることができます:

(http.request.uri matches "^/(.*)\\?width=([0-9]+)&height=([0-9]+)$")
Path > Rewrite to... > Dynamicのテキスト
regex_replace(
http.request.uri,
"^/(.*)\\?width=([0-9]+)&height=([0-9]+)$",
"/cdn-cgi/image/width=${2},height=${3}/${1}"
)

Query > Rewrite to… > Staticフィールドは空のままにしてください。

あなたのゾーンで要求されたすべての画像をImagesを通じて変換する

この例では、format=autoオプションを使用して、あなたのゾーンで要求されたすべての画像を変換することができます:

(http.request.uri.path.extension matches "(jpg)|(jpeg)|(png)|(gif)") and (not (any(http.request.headers["via"][*] contains "image-resizing")))
Path > Rewrite to... > Dynamicのテキスト
regex_replace(http.request.uri.path, "/(.*)", "/cdn-cgi/image/format=auto/${1}")