mirror of
https://github.com/caddyserver/website.git
synced 2025-04-22 04:56:17 -04:00
69 lines
2.2 KiB
Markdown
69 lines
2.2 KiB
Markdown
---
|
|
title: root (Caddyfile directive)
|
|
---
|
|
|
|
# root
|
|
|
|
Sets the root path of the site, used by various matchers and directives that access the file system. If unset, the default site root is the current working directory.
|
|
|
|
Specifically, this directive sets the `{http.vars.root}` placeholder. It is mutually exclusive to other `root` directives in the same block, so it is safe to define multiple roots with matchers that intersect: they will not cascade and overwrite each other.
|
|
|
|
This directive does not automatically enable serving static files, so it is often used in conjunction with the [`file_server` directive](file_server) or the [`php_fastcgi` directive](php_fastcgi).
|
|
|
|
|
|
## Syntax
|
|
|
|
```caddy-d
|
|
root [<matcher>] <path>
|
|
```
|
|
|
|
- **<path>** is the path to use for the site root.
|
|
|
|
Note that the `<path>` argument could be confused by the parser for a [matcher token](/docs/caddyfile/matchers#syntax) if it begins with `/`. To disambiguate, specify a wildcard matcher token (`*`). See examples below.
|
|
|
|
|
|
## Examples
|
|
|
|
Set the site root to `/home/bob/public_html` (assumes Caddy is running as the user `bob`):
|
|
|
|
<aside class="tip">
|
|
|
|
If you're running Caddy as a systemd service, reading files from `/home` will not work, because the `caddy` user does not have "executable" permission on the `/home` directory (necessary for traversal). It's recommended that you place your files in `/srv` or `/var/www/html` instead.
|
|
|
|
</aside>
|
|
|
|
|
|
```caddy-d
|
|
root * /home/bob/public_html
|
|
```
|
|
|
|
|
|
<aside class="tip">
|
|
|
|
Note that a [wildcard matcher](/docs/caddyfile/matchers#wildcard-matchers) is required here because the first argument is ambiguous with a [path matcher](/docs/caddyfile/matchers#path-matchers).
|
|
|
|
</aside>
|
|
|
|
|
|
Set the site root to `public_html` (relative to current working directory) for all requests:
|
|
|
|
(No matcher token is required here because our site root is a relative path, so it does not start with a forward slash and thus is not ambiguous.)
|
|
|
|
```caddy-d
|
|
root public_html
|
|
```
|
|
|
|
Change the site root only for requests in `/foo/*`:
|
|
|
|
```caddy-d
|
|
root /foo/* /home/user/public_html/foo
|
|
```
|
|
|
|
The `root` directive is commonly paired with [`file_server`](file_server) to serve static files and/or with [`php_fastcgi`](php_fastcgi) to serve a PHP site:
|
|
|
|
```caddy
|
|
example.com {
|
|
root * /srv
|
|
file_server
|
|
}
|
|
```
|