GitHub iconEdit on GitHub


The mechanics for if and what script should run on a request based on the URL.

For zones, scripts are managed by the name of the script. A request to your subdomain will run through the active script with corresponding name, script-name.

All the logic for routing must be done in the script itself. For example, you can use the router template.

Each script that runs must have a script name, so there is currently no way to run a script on

Custom Zones

For zones proxied on Cloudflare*, route patterns decide what (if any) script is matched based on the URL of that request. Requests are routed through a Workers script when the URL matches a route pattern assigned to that script.

Route patterns can be added using the Cloudflare API or by going to the Workers tab after selecting a zone.

Workers Route Modal

Cloudflare Site routes are comprised of:

* A zone that you have registered with some registrar (not and setup Cloudflare to serve as a reverse proxy.

Matching Behavior

Route patterns look like this:


This pattern would match all HTTPS requests destined for a subhost of and whose paths are prefixed by /images/.

A pattern to match all requests looks like this:


While they look similar to a regex pattern, route patterns follow specific rules:

  • The only supported operator is wildcard * which matches zero or more of any character.
  • Route patterns may not contain infix wildcards or query parameters, e.g. neither*.jpg nor* are valid route patterns.
  • When more than one route pattern could match a request URL, the most specific route pattern wins. For example, the pattern* would take precedence over ** when matching a request for
  • Route pattern matching considers the entire request URL, including the query parameter string. Since route patterns may not contain query parameters, the only way to have a route pattern match URLs with query parameters is to terminate it with a wildcard, *.
  • Route patterns are case sensitive, e.g.* and* are two distinct routes.

A route can be specified without being associated with a worker; this will act to negate any less specific patterns. For example, consider this pair of route patterns, one with a Workers script and one without:

* -> <no script>
**       -> worker-script

In this example, all requests destined for and whose paths are prefixed by /images/ would be routed to worker-script, except for /images/cat.png, which would bypass Workers completely. Requests with a path of /images/cat.png?foo=bar would be routed to worker-script, due to the presence of the query string.


Here is the full set of rules governing route pattern validity:

  • Route patterns must include your zone

    If your zone is, then the simplest possible route pattern you can have is, which would match and, and nothing else. As with a URL, there is an implied path of / if you do not specify one.

  • Route patterns may not contain any query parameters

    For example, is not a valid route pattern.

  • Route patterns may optionally begin with http:// or https://

    If you omit a scheme in your route pattern, it will match both http:// and https:// URLs. If you include http:// or https://, it will only match HTTP or HTTPS requests, respectively.

    • https://* matches but not

    • * matches both and

  • Hostnames may optionally begin with *

    If a route pattern hostname begins with *, then it matches the host and all subhosts. If a route pattern hostname begins with *., then it matches only all subhosts.

    • * matches and

    • * matches but not

  • Paths may optionally end with *

    If a route pattern path ends with *, then it matches all suffixes of that path.

    •* matches and and

    •* matches but not

  • Subdomains must have a DNS Record

    All subdomains must have a DNS record to be proxied on Cloudflare and compatible with Workers. For example if you have the route pattern * and no DNS records, any request to will result in the error ERR_NAME_NOT_RESOLVED.