Scully静态服务器无法正常访问带百分号编码空格的URL路径
问题原因
Scully 生成静态文件时会自动对路由中的百分号编码做解码处理,你在 scully-routes.json 中定义的 /Page%201 会被解码为 /Page 1,最终生成的静态文件存放在 ./dist/static/Page 1/ 目录下。
Scully 内置的静态开发服务器不会自动对请求路径做解码匹配,浏览器发送的 Page%201 请求无法对应到本地的 Page 1 目录,就会返回404错误。无空格的路由不存在编码解码差异,所以可以正常访问。
解决方案
方案1:调整Scully路由配置(本地+部署通用,推荐)
- 打开项目根目录下的
scully.<你的项目名>.config.ts配置文件,直接定义未编码的原始路由,不要手动写百分号编码格式:
import { ScullyConfig } from '@scullyio/scully'; export const config: ScullyConfig = { projectRoot: "./src", projectName: "替换为你的实际项目名称", outDir: './dist/static', // 路由配置直接使用原始带空格的路径,不要写%20 routes: { '/Page 1': { type: 'default' }, // 其他带特殊字符的路由都按照原始格式填写 } };
- 删除原有的
scully-routes.json文件,重新执行Scully生成命令:npx scully --scanRoutes - 重启Scully静态服务器即可正常访问带空格的路由。
方案2:本地测试临时兼容
如果不想调整路由配置,可在Scully配置中添加404 fallback规则,所有未匹配的请求都回退到index.html走客户端路由:
在原有Scully配置中新增字段即可:
export const config: ScullyConfig = { // 保留原有所有配置不变,新增以下字段 handle404: 'index', };
该方案不会破坏原有静态文件生成规则,可直接兼容本地开发时的编码路由访问。
方案3:生产部署兼容
正式环境部署不需要使用Scully内置服务器,用Nginx、Caddy等常规Web服务器部署即可,这类服务器默认会自动对请求路径的百分号编码做解码,直接匹配带空格的静态目录,无需额外修改配置。
内容的提问来源于stack exchange,提问作者domrac
相关产品推荐
相关产品推荐

