Skip to content
Rules
Visit Rules on GitHub
Set theme to dark (⇧+D)

Common use cases

This page includes examples of URL Rewrite Rules and HTTP Request Header Modification Rules that address common use cases.


URL rewrite examples

The following use cases illustrate how to perform URL rewrites with Transform Rules:

Rewrite path of welcome page for visitors in specific countries

To have a welcome page in two languages, create two URL Rewrite Rules with a static rewrite of the path component:

URL Rewrite Rule #1

Text in Expression Editor:

http.request.uri.path == "/welcome.html" && ip.geoip.country == "GB"

Text after Path > Rewrite to... > Static:

/welcome-gb.html

URL Rewrite Rule #2

Text in Expression Editor:

http.request.uri.path == "/welcome.html" && ip.geoip.country == "PT"

Text after Path > Rewrite to... > Static:

/welcome-pt.html

Rewrite URL query string of blog visitors

To rewrite a request to the /blog path to /blog?sort-by=date, create a URL Rewrite Rule with the following settings:

Text in Expression Editor:

http.request.uri.path == "/blog"

Text after Query > Rewrite to... > Static:

sort-by=date

Additionally, set the path rewrite action of the same rule to Preserve so that the URL path doesn’t change.

Rule configuration for query rewrite in the blog example

Rewrite path of archived blog posts

To rewrite all requests to /news/2012/... to /archive/news/2012/... you must add a reference to the content of the original URL. Create a new URL Rewrite Rule and define a dynamic URL path rewrite using an expression:

Text in Expression Editor:

starts_with(http.request.uri.path, "/news/2012/")

Text after Path > Rewrite to... > Dynamic:

concat("/archive", http.request.uri.path)

The filter uses the starts_with() function all paths starting with /news/2012/. The dynamic path rewrite uses the concat() function to concatenate a prefix to the original URL path of the HTTP request.

Rewrite path of moved section of a website

To rewrite everything under /blog/<x> to /marketing/<x> you must modify the first component of the path (/blog/). Create a URL Rewrite Rule and use the regex_replace() function for this purpose:

Text in Expression Editor:

starts_with(http.request.uri.path, "/blog/")

Text after Path > Rewrite to... > Dynamic:

regex_replace(http.request.uri.path, "^/blog/", "/marketing/")

The regex_replace() function matches the path component on a regular expression (^/blog/) and then provides a replacement for that match (/marketing/).

Rewrite path with several URL segments to a different URL segment

To rewrite paths like /images/<folder1>/<folder2>/<filename> — where <folder1>, <folder2>, and <filename> can vary — to /img/<filename>, create a URL Rewrite Rule with a dynamic rewrite of the path component:

Text in Expression Editor:

http.request.uri.path ~ "^/images/[^/]+/[^/]+/[^/]+$"

Text after Path > Rewrite to... > Dynamic:

regex_replace(http.request.uri.path, "^/images/[^/]+/[^/]+/(.+)$", "/img/${1}")

For example, this rule would rewrite the /images/nature/animals/tiger.png path to /img/tiger.png.

Rewrite blog archive URLs to support a new URL format

To rewrite the URLs of a blog archive that follow the URL format /posts/<YYYY>-<MM>-<DD>-<title> to the new format /posts/<YYYY>/<MM>/<DD>/<title>, create the following URL Rewrite Rule:

Text in Expression Editor:

http.request.uri.path ~ "^/posts/[0-9]+-[0-9]+-[0-9]+-.*"

Text after Path > Rewrite to... > Dynamic:

regex_replace(http.request.uri.path, "^/posts/([0-9]+)-([0-9]+)-([0-9]+)-(.*)$", "/posts/${1}/${2}/${3}/${4}")

The function regex_replace() also allows you to extract parts of the URL using regular expressions' capture groups. Create capture groups by putting part of the regular expression in parentheses. Then, reference a capture group using ${<num>} in the replacement string, where <num> is the number of the capture group.


HTTP request header modification examples

The following examples illustrate how to perform header modifications with Transform Rules:

Add an HTTP request header with a static value

The following HTTP Request Header Modification Rule adds a header named X-Source with a static value (Cloudflare) to the request:

Text in Expression Editor:

starts_with(http.request.uri.path, "/en/")

Selected operation under Modify header: Set static

Header name: X-Source

Value: Cloudflare

Add an HTTP request header with the current bot score

The following HTTP Request Header Modification Rule adds a header named X-Bot-Score with the current bot score to the request:

Text in Expression Editor:

starts_with(http.request.uri.path, "/en/")

Selected operation under Modify header: Set dynamic

Header name: X-Bot-Score

Value: to_string(cf.bot_management.score)

Remove an HTTP request header

The following HTTP Request Header Modification Rule removes the cf-connecting-ip header from the request:

Text in Expression Editor:

starts_with(http.request.uri.path, "/private/")

Selected operation under Modify header: Remove

Header name: cf-connecting-ip