https://github.com/mholt/caddy-webdav
WebDAV handler module for Caddy
https://github.com/mholt/caddy-webdav
caddy webdav webdav-server
Last synced: about 1 year ago
JSON representation
WebDAV handler module for Caddy
- Host: GitHub
- URL: https://github.com/mholt/caddy-webdav
- Owner: mholt
- License: apache-2.0
- Created: 2020-04-12T16:52:42.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-22T15:15:43.000Z (about 2 years ago)
- Last Synced: 2024-05-22T16:36:03.894Z (about 2 years ago)
- Topics: caddy, webdav, webdav-server
- Language: Go
- Size: 79.1 KB
- Stars: 188
- Watchers: 9
- Forks: 24
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
WebDAV for Caddy
================
This package implements a simple WebDAV handler module for Caddy.
> [!NOTE]
> This is not an official repository of the [Caddy Web Server](https://github.com/caddyserver) organization.
## Syntax
```
webdav [] {
root
prefix
}
```
Because this directive does not come standard with Caddy, you need to [put the directive in order](https://caddyserver.com/docs/caddyfile/options). The correct place is up to you, but usually putting it near the end works if no other terminal directives match the same requests. It's common to pair a webdav handler with a `file_server`, so ordering it just before is often a good choice:
```
{
order webdav before file_server
}
```
Alternatively, you may use `route` to order it the way you want. For example:
```
localhost
root * /srv
route {
rewrite /dav /dav/
webdav /dav/* {
prefix /dav
}
file_server
}
```
The `prefix` directive is optional but has to be used if a webdav share is used in combination with matchers or path manipulations. This is because webdav uses absolute paths in its response. There exist a similar issue when using reverse proxies, see [The "subfolder problem", OR, "why can't I reverse proxy my app into a subfolder?"](https://caddy.community/t/the-subfolder-problem-or-why-cant-i-reverse-proxy-my-app-into-a-subfolder/8575).
```
webdav /some/path/match/* {
root /path
prefix /some/path/match
}
```
If you want to serve WebDAV and directory listing under same path (similar behaviour as in Apache and Nginx), you may use [Request Matchers](https://caddyserver.com/docs/caddyfile/matchers) to filter out GET requests and pass those to [file_server](https://caddyserver.com/docs/caddyfile/directives/file_server).
Example with authenticated WebDAV and directory listing under the same path:
```
@get method GET
route {
basicauth {
username hashed_password_base64
}
file_server @get browse
webdav
}
```
Or, if you want to create a public listing, but keep WebDAV behind authentication:
```
@notget not method GET
route @notget {
basicauth {
username hashed_password_base64
}
webdav
}
file_server browse
```
## Credit
Special thanks to @hacdias for making caddy-webdav for Caddy 1, from which this work is derived: https://github.com/hacdias/caddy-webdav