Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Rules のトラブルシューティング

最終更新 Markdown で表示Agent セットアップ

リダイレクトと他の Cloudflare 製品の相互作用

リダイレクトは、チャレンジなどの Cloudflare 製品や機能と干渉することがあります。問題を避けるため、ルール式から /cdn-cgi/* の URI パス を除外することを検討してください。特定の機能だけの問題を避けるなら、/cdn-cgi/challenge-platform/* のようなサブパスだけを除外しても構いません(この例では Cloudflare challenges)。

複数の検証サービスが使う /.well-known/* の URL パスも除外した方がよい場合があります。詳細は リダイレクトと HTTP DCV などの検証手続きの相互作用 を参照してください。

Cloudflare challenges と Rules 機能の相互作用

1 つ以上の Rules 機能が有効な URI パスに対して チャレンジ を出す場合は、チャレンジのループを避けるため、ルール式で /cdn-cgi/challenge-platform/ で始まる URI パスを除外してください。

たとえば、and 演算子と starts_with() 関数を使って、複合式を定義します。

<OTHER_RULE_CONDITIONS> and not starts_with(http.request.uri, "/cdn-cgi/challenge-platform/")

リダイレクトと HTTP DCV などの検証手続きの相互作用

カスタムホスト名の検証(Cloudflare for SaaS)、Pages のドメイン検証HTTP によるドメインコントロール検証(DCV) などの検証手続きで使うパスは、リダイレクトの影響を受けることがあります。

問題を避けるため、ルールから /.well-known/* の URI パスを除外することを検討してください。

レスポンスから Content-Length ヘッダーが削除される

Cloudflare は、サイト訪問者へ届けるレスポンスから Content-Length ヘッダーを削除することがあります。訪問者に Content-Length ヘッダーを届ける必要がある場合は、オリジンサーバーがレスポンスに cache-control: no-transform HTTP ヘッダーを含めるよう設定します。

このルールがトラフィックに適用されない場合があります

ルール式が一致するホスト名について、DNS レコードを作成しておらず、Cloudflare 経由のプロキシも有効にしていない場合、次の選択肢があるポップアップが表示されます。

  • そのホスト名の DNS レコードがない場合: ルール作成を続けるか、そのホスト名向けにプロキシ済みの新しい DNS レコードを作成するか。
  • そのホスト名の DNS レコードはあるが、トラフィックがプロキシされていない場合: ルール作成を続けるか、既存の DNS レコードでプロキシを有効にするか。

新しい DNS レコードを作成する場合、そのレコードには rules タグと、次のコメントが付きます。

Created during Cloudflare Rules deployment process for <RULE_NAME>

URL 書き換えは、あとで実行される他の Rules 機能に影響する

URL 書き換え で URI パスを書き換えると、あとで実行される他の Rules 機能(Origin Rules など)に影響することがあります。それらの機能のフィルター式に URI パスが含まれている場合です。

次のオリジンルール設定を考えます。

  • Rule expression: http.host == "example.com" and starts_with(http.request.uri.path, "/downloads/")
  • Host header > Rewrite to: assets.example.com

次の設定で新しい URL 書き換えを作成するとします。

  • Rule expression: http.host == "example.com" and starts_with(http.request.uri.path, "/downloads/")
  • Path > Rewrite to > Dynamic: regex_replace(http.request.uri.path, "^/downloads/", "/")

オリジンルールは /downloads/* パスに一致しなくなります。URL 書き換えは Origin Rules より先に実行され、URI パスは "/downloads/" から "/" に書き換えられるためです。

解決方法

この状況を防ぐには、ルール式で raw フィールドを使います。raw フィールドはリクエスト評価ワークフロー全体で不変であり、先に一致したルールのアクションの影響を受けません。

この例では、両方のルールで raw.http.request.uri.path フィールドを使えます。

URL 書き換え

  • Rule expression: http.host == "example.com" and starts_with(raw.http.request.uri.path, "/downloads/")
  • Path > Rewrite to > Dynamic: regex_replace(raw.http.request.uri.path, "^/downloads/", "/")

オリジンルール

  • Rule expression: http.host == "example.com" and starts_with(raw.http.request.uri.path, "/downloads/")
  • Host header > Rewrite to: assets.example.com

こうすると、2 つのルールは意図どおりに動きます。さらに、最初のルールが URI パスの値を更新していても、同じ式を 2 つのルールで使えます。

raw フィールドの一覧は フィールドリファレンス を参照してください。

役に立ちましたか?