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

如何消除URL参数前的多余斜杠?(Netlify+Stripe+Nuxt场景)

问题描述

项目基于Netlify Functions、Stripe API、NUXT和Axios开发,支付流程逻辑如下:

  • 前端通过Axios调用Netlify函数创建Stripe会话:
    async checkout() {
      try {
        const response = await this.$axios.$post(
          "/.netlify/functions/payment_cart",
          {
            cart: this.shoppingCart,
          }
        );
        window.location.href = response.stripe.url;
      } catch (error) {
        console.log(error);
      }
    },
    
  • Netlify函数中构建Stripe会话时设置跳转URL:
    const session = await stripe.checkout.sessions.create({
       line_items: line_items,
       shipping_options: shipping_array,
       allow_promotion_codes: true,
       mode: "payment",
       success_url:
         process.env.BASE_URL + "/success?session_id={CHECKOUT_SESSION_ID}",
       cancel_url: process.env.BASE_URL + "/cancel",
    });
    

目前支付功能正常,但支付完成后跳转的URL会在success和参数前多出一个斜杠(示例:https://mywebsite.com/success/?session_id=123456789),导致Nuxt无法读取参数。本地环境无此问题,硬编码BASE_URL或临时用replace处理URL的方案无法兼容多参数,需解决多余斜杠问题。

解决方案

1. 用URL构造器替代字符串拼接(推荐)

手动拼接URL容易出现斜杠冲突,改用URL对象自动处理路径拼接:

// 在payment_cart函数中替换原success_url和cancel_url的拼接逻辑
const baseUrl = process.env.BASE_URL;

// 构建success_url
const successUrl = new URL('/success', baseUrl);
successUrl.searchParams.set('session_id', '{CHECKOUT_SESSION_ID}');

// 构建cancel_url
const cancelUrl = new URL('/cancel', baseUrl);

// 创建Stripe会话
const session = await stripe.checkout.sessions.create({
   line_items: line_items,
   shipping_options: shipping_array,
   allow_promotion_codes: true,
   mode: "payment",
   success_url: successUrl.toString(),
   cancel_url: cancelUrl.toString(),
});

无论BASE_URL是否带末尾斜杠,URL对象都会自动生成正确格式的URL,避免多余斜杠。

2. 配置Nuxt路由强制去除末尾斜杠

在nuxt.config.js中设置路由的trailingSlash为false,强制所有路由不带末尾斜杠,同时Nuxt会自动重定向带斜杠的URL到不带的版本:

// nuxt.config.js
export default {
  // ...其他配置
  router: {
    trailingSlash: false
  }
}

这样即使出现带斜杠的URL,也会被重定向到正确的格式,Nuxt就能正常读取参数。

3. 添加Netlify重定向规则

如果上述方法无效,可以在项目根目录创建_redirects文件,添加强制去除斜杠的规则:

# 全局去除所有路由的末尾斜杠
/* /:splat 301!

# 或者针对success页面单独设置
/success/ /success 301!

规则中的301!表示永久重定向且忽略其他冲突规则,确保URL被修正为不带斜杠的格式。

内容的提问来源于stack exchange,提问作者Jeffrey van Zwam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:50:23