Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/content/docs/rules/custom-errors/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ When an error of a [specific type](/rules/custom-errors/reference/error-page-typ
</Steps>

:::note
To customize a challenge page or a block page, use an Error Page, since Custom Error Rules will not be applied to security actions originating from Cloudflare products. Keep in mind that [custom WAF response](/waf/custom-rules/create-dashboard/#configure-a-custom-response-for-blocked-requests) takes precedence over an Error Page and custom error rules.
To customize a challenge page or the default Cloudflare WAF block page, use an Error Page. Custom Error Rules do not apply to security actions originating from Cloudflare products (such as the default WAF block page) — they only override error responses from your origin server or [custom WAF responses](/waf/custom-rules/create-dashboard/#configure-a-custom-response-for-blocked-requests). A custom WAF response configured directly in a WAF rule action takes precedence over both an Error Page and a custom error rule.
:::

## Availability
Expand Down Expand Up @@ -88,3 +88,9 @@ A custom error asset corresponds to a web resource such as an HTML web page (inc
Once the custom error asset is stored in Cloudflare's global network, the URL you initially provided no longer needs to be available. You can update an existing custom error asset by fetching it again. The metadata associated with each custom error asset includes the timestamp when the last fetch occurred, and this information is displayed in the dashboard.

You can use a custom error asset in one or more [custom error rules](#custom-error-rules) in the same scope where you defined the asset (zone or account).

### Size limits

When you provide a URL for a custom error asset, Cloudflare fetches the page and inlines all referenced resources (images, CSS, and JavaScript) into the HTML using base64 encoding. The processed page must not exceed approximately 1.5 MB.

If your custom error asset exceeds this size, reduce the number or size of referenced resources. You can also host large resources externally, as long as they remain accessible from Cloudflare's network when the asset is fetched.
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ You can create a request header transform rule [in the dashboard](/rules/transfo

- Due to protocol compliance reasons, modifying or removing request headers with [forbidden header names](https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name) (such as `Accept-Encoding`) is generally not allowed in Request Header Transform Rules.

- You cannot modify the value of any header commonly used to identify the website visitor's IP address or initial protocol, such as `x-forwarded-for`, `true-client-ip`, `x-real-ip`, or `x-forwarded-proto`.
- You cannot modify the value of any header commonly used to identify the website visitor's IP address or initial protocol, such as `x-forwarded-for`, `true-client-ip`, `x-real-ip`, or `x-forwarded-proto`. If you need to set a protected header such as `x-real-ip` on requests reaching your origin server, use [Cloudflare Snippets](/rules/snippets/) or [Cloudflare Workers](/workers/) with a subrequest (`fetch(request)`) — the header can be set on subrequests but not on the parent request.

- Although you can remove the `x-forwarded-for` header, Cloudflare's cache service will add it back (with a different value) before the request reaches your origin server. However, if the request is handled by Cloudflare Workers — which [run before the cache](/workers/reference/how-the-cache-works/) — the `x-forwarded-for` request header will be absent because the cache service has not yet re-added it.
- Although you can remove the `x-forwarded-for` header in a Request Header Transform Rule, Cloudflare's backend proxy re-adds it (with the visitor's IP address) before the request reaches your origin server, because the proxy runs after all rule phases. The same applies to [Managed Transforms](/rules/transform/managed-transforms/). However, if the request is handled by Cloudflare Workers — which [run before the cache](/workers/reference/how-the-cache-works/) — the `x-forwarded-for` request header will be absent because the proxy has not yet re-added it.

- You cannot set or modify the value of `cookie` HTTP request headers, but you can remove these headers. Configuring a rule that removes the `cookie` HTTP request header will remove all `cookie` headers in matching requests.

Expand Down
11 changes: 11 additions & 0 deletions src/content/docs/rules/url-forwarding/bulk-redirects/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,17 @@ Unlike dynamic URL redirects created in [Single Redirects](/rules/url-forwarding

---

## Bulk Redirects and the WAF

Bulk Redirects run after the WAF in the request processing pipeline. This means that:

- If a [WAF custom rule](/waf/custom-rules/) or [rate limiting rule](/waf/rate-limiting-rules/) blocks a request, the Bulk Redirect will not execute.
- If a WAF rule logs or challenges a request that subsequently passes, the firewall event will still appear in [Security Events](/waf/analytics/security-events/) and [Logpush](/logs/) — even though the request is later redirected. This is expected behavior.

For the complete request processing order, refer to [Rules execution order](/rules/url-forwarding/#execution-order).

---

## Related resources

- [Availability](/rules/url-forwarding/#availability): Information on the Bulk Redirects quotas and features per Cloudflare plan.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ If `true`, the redirect URL will keep the query string of the original request.

For example, a URL redirect from `/my-folder/` to `/other-folder/` with **Preserve query string** enabled will redirect a request from `/my-folder/?name=value` to `/other-folder/?name=value`. If **Preserve query string** is disabled, the request will be redirected from `/my-folder/?name=value` to `/other-folder/`.

:::caution
When **Preserve query string** is enabled and the target URL also contains a query string, the original request's query string replaces the target URL's query string entirely. To add a fixed query parameter to redirected URLs, leave **Preserve query string** disabled and include the parameter directly in the target URL.
:::

## Preserve path suffix

API field: `preserve_path_suffix` <Type text="Boolean" /> <MetaInfo text="default: true" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ Compound expressions allow you to generate sophisticated, highly targeted rules.

This limit applies whether you use the visual [Expression Builder](/ruleset-engine/rules-language/expressions/edit-expressions/#expression-builder) to define your expression, or write the expression manually in the [Expression Editor](/ruleset-engine/rules-language/expressions/edit-expressions/#expression-editor).

## Maximum regular expressions per rule

Each rule can contain a maximum of 64 regular expressions in its expression. This limit applies across all rule types that use the [Rules language](/ruleset-engine/rules-language/).

Rules that exceed this limit cannot be created or updated. Existing rules above this limit continue to work but cannot be modified until the expression is simplified.

## Additional features

You can also use the following Rules language features in your expressions:
Expand Down
4 changes: 2 additions & 2 deletions src/content/fields/index.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ entries:
keywords: [request, uri, url, domain, client, visitor]
summary: The hostname used in the full request URI.
description: |-
The `http.host` field contains the `Host` header from the original request.
The `http.host` field contains the `Host` header from the original client request.

If you have configured [Origin Rules](/rules/origin-rules/) that change the hostname, they will not be reflected in the `http.host` field value.
If you have configured [Origin Rules](/rules/origin-rules/) that change the hostname, this change is not reflected in the `http.host` value seen by other rule phases (such as custom rules, cache rules, or transform rules) or [Cloudflare Workers](/workers/). All rule phases and Workers evaluate against the original, unmodified host.
example_value: |-
"www.example.org"

Expand Down