You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit adapter-node部署子目录后url.pathname出现双斜杠问题

问题根源与解决方案

核心问题根源

  1. SvelteKit配置位置错误:你把paths配置写在了kit对象外面,SvelteKit根本不会读取这个位置的配置,导致base: '/courses'完全没生效,这是路径解析异常的核心原因。
  2. Apache反向代理未配置:Apache没有把/courses路径的请求转发到Node服务的3000端口,请求没正确到达Node应用,才会出现双斜杠、params为空的情况,最终触发500错误。
  3. 服务启动环境变量缺失:直接执行node build可能没传递必要的环境变量,影响服务对路径的正确解析。

修复步骤

1. 修正SvelteKit配置

把paths移到kit对象内部,修改svelte.config.js:

import adapter from '@sveltejs/adapter-node';
import { vitePreprocess } from '@sveltejs/kit/vite';

/** @type {import('@sveltejs/kit').Config} */
const config = {
    preprocess: vitePreprocess(),
    kit: {
        adapter: adapter(),
        alias: {
            '$routes': './src/routes',
            '$routes/*': './src/routes/*',
        },
        // 将paths移到kit内部,这才是正确的配置位置
        paths: {
            base: '/courses',
            relative: false,
        },
    },
};
export default config;

修改后重新执行npm run build,把新生成的build文件夹上传到服务器覆盖原文件。

2. 配置Apache反向代理

在Apache的站点配置文件中添加反向代理规则,让/courses路径的请求转发到Node服务的3000端口:

<Location /courses>
    ProxyPass http://localhost:3000
    ProxyPassReverse http://localhost:3000
    # 处理Cookie路径问题(如果应用用到Cookie)
    ProxyPassReverseCookiePath / /courses
</Location>

配置完成后重启Apache服务,确保规则生效。

3. 正确启动Node服务

启动服务时指定必要的环境变量,命令如下:

PORT=3000 NODE_ENV=production node build

如果用SPanel的NodeJS Manager管理服务,可以直接在面板中添加BASE_PATH=/courses和PORT=3000的环境变量,再重启应用。

4. 验证修复效果

访问https://www.valuespreadsheet.com/courses/bootcamp,查看+layout.server.ts的日志,确认url.pathname应为/courses/bootcamp,params能正确获取动态路由的参数。

内容的提问来源于stack exchange,提问作者kregus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 21:09:59