SvelteKit路由重定向失效:旧缓存导致跳转至已移除路由
SvelteKit根路径重定向修改后仍跳转旧路径的问题解决
问题描述
原SvelteKit应用将根路径/重定向至/home,后续调整文件结构将/home迁移至/auth/home,并修改src/routes/+page.server.js中的重定向逻辑为跳转至/auth/home,同时添加hooks.server.js用于路由权限校验。但修改后访问根路径仍跳转至已不存在的/home,尝试使用goto替代redirect也无效。
原配置
原文件结构
src/routes/ ├── +error.svelte ├── +layout.server.js ├── +layout.svelte ├── (main) │ ├── home │ │ ├── +page.server.js │ │ └── +page.svelte │ ├── +layout.server.js │ ├── +layout.svelte │ ├── MainSideBar.svelte │ └── online │ └── [suc] │ ├── +page.server.js │ └── +page.svelte ├── +page.server.js
原重定向代码
import { redirect } from '@sveltejs/kit'; export function load() { redirect(308, '/home'); }
修改后的配置
修改后文件结构
src/routes/ ├── auth │ ├── +layout.server.js │ ├── +layout.svelte │ ├── (main) │ │ ├── home │ │ │ ├── +page.server.js │ │ │ └── +page.svelte │ │ ├── +layout.server.js │ │ ├── +layout.svelte │ │ ├── MainSideBar.svelte │ │ └── online │ │ └── [suc] │ │ ├── +page.server.js │ │ └── +page.svelte │ └── wiki │ ├── [category] │ │ └── [slug] │ │ ├── +page.server.js │ │ └── +page.svelte │ ├── +layout.server.js │ ├── +layout.svelte │ ├── +page.svelte │ └── SideNavigation.svelte ├── +error.svelte ├── +layout.svelte ├── login │ ├── +page.server.js │ └── +page.svelte ├── logout │ └── +page.server.js └── +page.server.js
修改后重定向代码
import { redirect } from '@sveltejs/kit'; export function load() { redirect(308, '/auth/home'); }
hooks.server.js代码
import { redirect } from '@sveltejs/kit'; /** @type {import('@sveltejs/kit').Handle} */ export async function handle({ event, resolve }) { const authToken = event.cookies.get('authToken'); if (event.url.pathname.startsWith('/auth')) { if (!authToken) { const redirectTo = event.url.pathname + event.url.search; redirect(303, `/login?redirect=${redirectTo}`); } } event.locals.token = authToken; const response = await resolve(event); return response; }
解决方法
清空浏览器缓存,以Firefox为例:打开开发者工具的网络面板,勾选「禁用缓存」选项,加载页面后取消勾选即可恢复正常。
内容的提问来源于stack exchange,提问作者Saul Castellanos
相关产品推荐
相关产品推荐

