Match Patterns

Host permissions and content script matching are based on a set of URLs defined by match patterns. A match pattern is essentially a URL that begins with a permitted scheme (http, https, file, or ftp, and that can contain '*' characters. The special pattern <all_urls> matches any URL that starts with a permitted scheme. Each match pattern has 3 parts:

  • scheme — for example, http or file or *

    Note: Access to file URLs isn't automatic. The user must visit the extensions management page and opt in to file access for each extension that requests it.

  • host — for example, or * or *; if the scheme is file, there is no host part
  • path — for example, /*, /foo*, or /foo/bar. The path must be present in a host permission, but is always treated as /*.

Here's the basic syntax:

<url-pattern> := <scheme>://<host><path>
<scheme> := '*' | 'http' | 'https' | 'file' | 'ftp'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars>

The meaning of '*' depends on whether it's in the scheme, host, or path part. If the scheme is *, then it matches either http or https, and not file, or ftp. If the host is just *, then it matches any host. If the host is *.hostname, then it matches the specified host or any of its subdomains. In the path section, each '*' matches 0 or more characters. The following table shows some valid patterns.

Pattern What it does Examples of matching URLs
http://*/* Matches any URL that uses the http scheme
http://*/foo* Matches any URL that uses the http scheme, on any host, as long as the path starts with /foo
https://**bar Matches any URL that uses the https scheme, is on a host (such as,, or, as long as the path starts with /foo and ends with bar Matches the specified URL
file:///foo* Matches any local file whose path starts with /foo file:///foo/bar.html
file:///foo* Matches any URL that uses the http scheme and is on the host
*://* Matches any URL that starts with or
<all_urls> Matches any URL that uses a permitted scheme. (See the beginning of this section for the list of permitted schemes.)

Here are some examples of invalid pattern matches:

Bad pattern Why it's bad No path
http://*foo/bar '*' in the host can be followed only by a '.' or '/'
http://foo.*.bar/baz  If '*' is in the host, it must be the first character
http:/bar Missing scheme separator ("/" should be "//")
foo://* Invalid scheme

Some schemes are not supported in all contexts.