If you use the Sveltekit Static adapter, and you have a single page application (such as the very Console I’m writing this article on), you will have the following set up in your pages.
+layout.ts
1export const ssr = false;
svelte.config.js
1import adapter from '@sveltejs/adapter-static';2 3export default {4 kit: {5 adapter: adapter({6 fallback: '200.html' // may differ from host to host7 })8 }9};
See the SvelteKit Single Page Apps docs for more information.
With this set up, when you build your app, non-ssr routes will be Javascript-rendered. The JS will be loaded from the 200.html
file.
For example, in our case, Hyvor Blogs’ build folder looks something like this:
1/build2 200.html3 index.html4 pricing.html5 ...
The static files are index.html
and pricing.html
. All other routes should be routed to 200.html
.
Caddy Fallback
Here’s the caddy configuration I used to make the fallback route work along with static files.
1:9091 { 2 handle { 3 file_server { 4 pass_thru 5 } 6 encode zstd gzip 7 try_files {path} {path}.html 8 } 9 handle {10 file_server11 rewrite * /200.html12 }13}
:9091
is the port. This will be different for you.The first
handle
block handles the the normal file server. Here, thepass_thru
directive is important. It instructs Caddy to go into the next block without returning a 404 error.The next block will route everything to the
200.html
file.
Comments