Example rules
The following sections contain example single redirect rule configurations.
Redirect visitors to the new URL of a specific page
This example static redirect for zone example.com
will redirect visitors requesting the /contact-us/
page to the new page URL /contacts/
.
When incoming requests match
- Field: URI Path
- Operator: equals
- Value:
/contact-us/
If you are using the Expression Editor, enter the following expression:http.request.uri.path eq "/contact-us/"
Then
- Type: Static
- URL:
/contacts/
- Status code: 301
- Preserve query string: Enabled
For example, the redirect rule would perform the following redirects:
Request URL | Target URL | Status code |
---|---|---|
example.com/contact-us/ | example.com/contacts/ | 301 |
example.com/contact-us/?state=TX | example.com/contacts/?state=TX | 301 |
example.com/team/ | (unchanged) | n/a |
Redirect all requests to a different hostname
This example dynamic redirect will redirect all requests for smallshop.example.com
to a different hostname using HTTPS, keeping the original path and query string.
When incoming requests match
- Field: Hostname
- Operator: equals
- Value:
smallshop.example.com
If you are using the Expression Editor, enter the following expression:(http.host eq "smallshop.example.com")
Then
- Type: Dynamic
- Expression:
concat("https://globalstore.example.net", http.request.uri.path)
- Status code: 301
- Preserve query string: Enabled
For example, the redirect rule would perform the following redirects:
Request URL | Target URL | Status code |
---|---|---|
http://smallshop.example.com/ | https://globalstore.example.net/ | 301 |
http://smallshop.example.com/admin/?logged_out=true | https://globalstore.example.net/admin/?logged_out=true | 301 |
https://smallshop.example.com/?all_items=1 | https://globalstore.example.net/?all_items=1 | 301 |
http://example.com/about/ | (unchanged) | n/a |
Redirect admin area requests to HTTPS
This example dynamic redirect for zone example.com
will redirect requests for the administration area of a specific subdomain (store.example.com
) to HTTPS, keeping the original path and query string.
When incoming requests match
- Field: SSL/HTTPS
- Value: Off
And
- Field: Hostname
- Operator: equals
- Value:
store.example.com
And
- Field: URI Path
- Operator: starts with
- Value:
/admin
If you are using the Expression Editor, enter the following expression:(not ssl and http.host eq "store.example.com" and starts_with(http.request.uri.path, "/admin"))
Then
- Type: Dynamic
- Expression:
concat("https://", http.host, http.request.uri.path)
- Status code: 301
- Preserve query string: Enabled
The rule includes SSL/HTTPS: Off (not ssl
in the rule expression) to avoid redirect loops.
For example, the redirect rule would perform the following redirects:
Request URL | Target URL | Status code |
---|---|---|
http://store.example.com/admin/products/ | https://store.example.com/admin/products/ | 301 |
https://store.example.com/admin/products/ | (unchanged) | n/a |
http://store.example.com/admin/?logged_out=true | https://store.example.com/admin/?logged_out=true | 301 |
http://store.example.com/?all_items=true | (unchanged) | n/a |
http://example.com/admin/ | (unchanged) | n/a |
Redirect UK and France visitors to their specific subdomains
This example dynamic redirect for zone example.com
will redirect United Kingdom and France visitors requesting the website’s root path (/
) to their localized subdomains https://gb.example.com
and https://fr.example.com
, respectively.
When incoming requests match
Using the Expression Editor:(ip.geoip.country eq "GB" or ip.geoip.country eq "FR") and http.request.uri.path eq "/"
Then
- Type: Dynamic
- Expression:
lower(concat("https://", ip.geoip.country, ".example.com"))
- Status code: 301
For example, the redirect rule would perform the following redirects:
Visitor country | Request URL | Target URL | Status code |
---|---|---|---|
United Kingdom | example.com | https://gb.example.com | 301 |
France | example.com | https://fr.example.com | 301 |
United States | example.com | (unchanged) | n/a |
Remove locale information from URL path
This example dynamic redirect for zone example.com
will redirect visitors from an old URL format that included the locale (for example, /en-us/<page_name>
) to the new format /<page_name>
.
When incoming requests match
- Field: URI Path
- Operator: matches regex
- Value:
^/[A-Za-z]{2}-[A-Za-z]{2}/
If you are using the Expression Editor, enter the following expression:http.request.uri.path matches "^/[A-Za-z]{2}-[A-Za-z]{2}/"
Then
- Type: Dynamic
- Expression:
regex_replace(http.request.uri.path, "^/[A-Za-z]{2}-[A-Za-z]{2}/(.*)", "/${1}")
- Status code: 301
- Preserve query string: Enabled
The function regex_replace()
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.
For example, the redirect rule would perform the following redirects:
Request URL | Target URL | Status code |
---|---|---|
example.com/en-us/meet-our-team | example.com/meet-our-team | 301 |
example.com/pt-BR/meet-our-team | example.com/meet-our-team | 301 |
example.com/en-us/calendar?view=month | example.com/calendar?view=month | 301 |
example.com/meet-our-team | (unchanged) | n/a |
example.com/robots.txt | (unchanged) | n/a |
Perform mobile redirects
The following examples will redirect visitors using mobile devices — based on the request user agent string — to a different hostname.
Redirect mobile users dropping the original URI path
This example static redirect will redirect requests for the current zone (example.com
) from mobile users to m.example.com
without preserving the URI path in the original HTTP request.
When incoming requests match
- Enter the following expression in the Expression Editor:
not http.host in {"m.example.com"} and (http.user_agent contains "mobi" or http.user_agent contains "Mobi")
Then
- Type: Static
- URL:
m.example.com
- Status code: 301
Notes about this example:
- The
not http.host in {"m.example.com"}
condition prevents redirect loops. - The user agent condition follows Mozilla’s recommendation for identifying mobile devices.
- The Then > URL value should be the same as the one you entered in the
http.host
condition of the rule’s filter expression. - You can redirect users to other zones on Cloudflare or to other hostnames not on Cloudflare.
Redirect mobile users keeping the original path
This example dynamic redirect will redirect requests for the current zone (example.com
) from mobile users to m.example.com
, keeping the URI path of the original HTTP request.
When incoming requests match
- Enter the following expression in the Expression Editor:
not http.host in {"m.example.com"} and (http.user_agent contains "mobi" or http.user_agent contains "Mobi")
Then
- Type: Dynamic
- Expression:
concat("https://m.example.com", http.request.uri.path)
- Status code: 301
Notes about this example:
- The
not http.host in {"m.example.com"}
condition prevents redirect loops. - The user agent condition follows Mozilla’s recommendation for identifying mobile devices.
- The hostname in Then > Expression should be the same as the one you entered in the
http.host
condition of the rule’s filter expression. - Depending on your use case, you may want to enable Then > Preserve query string to also keep the query string of the original request.
- You can redirect users to other zones on Cloudflare or to other hostnames not on Cloudflare.