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

为何访问含双斜杠的路径返回404?Fresh路由问题咨询

问题原因及解决方案

原因

Fresh框架(及其底层依赖的Deno HTTP服务器)默认会规范化请求路径,自动将多个连续斜杠合并为单个斜杠。这就导致你访问localhost:8000/api/A//B时,实际被服务器处理为/api/A/B,原始的双斜杠结构丢失,最终因路由不匹配返回404。

对于你需要支持的/api/https://example.com/这类路径,双斜杠是目标URL的一部分,但规范化后会被合并成/api/https:/example.com/,自然无法被正确捕获。

解决方案

1. 关闭路径规范化(推荐)

在Fresh的启动配置中,禁用Deno服务器的路径规范化功能,保留原始请求路径结构:

修改项目根目录的main.ts文件:

import { start } from "$fresh/server.ts";
import manifest from "./fresh.gen.ts";

await start(manifest, {
  server: {
    strictPath: false, // 禁用路径规范化,保留连续斜杠
  },
});

设置完成后,再访问带双斜杠的路径时,ctx.params.url就能正确捕获原始带双斜杠的路径部分,比如访问/api/https://example.com/时,ctx.params.url的值为https://example.com/。

2. 直接从原始请求提取路径(备选)

如果不想修改全局服务器配置,可以直接从原始请求URL中截取未被规范化的路径段(优先推荐第一种方法,此方法依赖环境场景):

修改routes/api/[...url].ts的代码:

import { Handlers } from "$fresh/server.ts";
export const handler: Handlers = {
  GET(req) {
    // 截取/api/之后的原始路径段
    const rawPathSegment = req.url.split("/api/", 2)[1] ?? "";
    return new Response(rawPathSegment);
  },
};

这样即使路径被规范化,也能从完整请求URL中拆分出所需的目标部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:28:24