Svelte访问无尾斜杠/static路径403无法触发自定义错误页问题
根因
本地开发时,不带尾斜杠的/static请求会被Vite静态资源中间件优先拦截,直接映射为项目根目录下的static文件夹路径,触发Vite的文件系统访问白名单校验,直接返回403。请求根本没到SvelteKit路由层,自然触发不了自定义错误页。
带尾斜杠的/static/不会触发这个目录映射逻辑,会正常交给SvelteKit路由处理,匹配不到路由就走自定义错误页。
该问题仅在本地开发环境出现,生产环境运行构建产物,没有Vite的fs校验逻辑,不会有这个异常。
解决方法
两种方案按需选择:
方案1:全局尾斜杠重定向
如果项目可以统一使用带尾斜杠的路由规范,直接在svelte.config.js中添加配置,让所有不带尾斜杠的路径自动跳转到带尾斜杠版本:/** @type {import('@sveltejs/kit').Config} */ const config = { kit: { trailingSlash: 'always' } }; export default config;配置后访问
/static会自动重定向到/static/,正常触发自定义错误页。方案2:调整Vite fs权限配置
如果项目需要保留无尾斜杠的路由规范,就修改Vite配置,把项目根目录加入文件系统访问白名单,Vite找不到对应静态资源时会自动把请求转交给SvelteKit路由处理。
项目根目录下新建/修改vite.config.js:import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [sveltekit()], server: { fs: { allow: ['.'] } } });配置完成后重启开发服务器即可生效,访问
/static时Vite找不到对应静态文件,会流转到SvelteKit路由层,正常返回自定义错误页。
内容的提问来源于stack exchange,提问作者FabienC
相关产品推荐
相关产品推荐

