0

Let's say I have following file structure:

- Caddyfile
- files
  - app1
    - index.html
  - app2
    - index.html
  - app3
    - index.html

Where app1, app2 and app3 are Single Page Applications with clientside routing. I am using Caddy v2. I want to route /app1/* to app1 directory and likewise other two, falling back to respective index.html in case searched for file doesn't exist.

I think that for one app correct configuration is:

handle /app1/* {
  file_server {
    root ./files/app1
    try_files {path} /index.html 
  }
}

And that I can just repeat this once for each app. I want to know if it is possible to define this more succintly, since our company currently has 20-30 SPAs, for example with something like:

file_server {
    root ./files
    try_files {path} {Maybe something here?}/index.html 
}
Matija Sirk
  • 596
  • 2
  • 15

2 Answers2

1

you can do this:

  root ./files
  try_files {path} {path}/index.html
  file_server
vishun
  • 79
  • 6
0

I figured it out.

@spa path_regexp spa ^(.*[\\\/])

handle @spa {
    root * ./files
    try_files {path} {path}.html {path}/ {path}/index.html {re.spa.1}/index.html    
    file_server
}

Regex matches everything before last slash, so for example in /files/app1/clientroute matched is /files/app1/. Then we use this match in {re.spa.1}/index.html and so reroute to /files/app1/index.html.

Matija Sirk
  • 596
  • 2
  • 15