You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Webpack代理配置:如何针对特定结尾路径实现请求重定向?

解决DevServer代理匹配带数字路由参数路径的问题

我来帮你搞定这个代理配置的问题!你现在的需求是让两种路径都能正确转发到8082端口的API:

  • 直接访问 http://localhost:8080/activites-digitales
  • 带任意数字路由参数的路径,比如 http://localhost:8080/123456/activites-digitales

原来的配置只匹配了固定路径,所以带数字前缀的路径无法触发代理。只需要调整DevServer的proxy规则,用正则表达式匹配路径并做重写即可,具体配置如下:

module.exports = {
  // 其他webpack配置...
  devServer: {
    proxy: {
      // 正则匹配:支持两种路径格式,数字前缀是可选的
      '^/(\\d+/)?activites-digitales': {
        target: 'http://localhost:8082',
        changeOrigin: true, // 必须开启,避免跨域请求头问题
        pathRewrite: {
          // 把带数字前缀的路径重写成目标API的路径
          '^/\\d+/activites-digitales': '/activites-digitales'
        }
      }
    }
  }
};

配置说明:

  • 正则匹配规则^/(\\d+/)?activites-digitales 表示匹配以 / 开头,可选的「数字+斜杠」前缀,然后是 activites-digitales 的路径,完美覆盖你需要的两种场景。
  • pathRewrite:当匹配到带数字前缀的路径时,把前面的数字部分去掉,只保留 /activites-digitales,这样转发到8082端口的请求路径就和API期望的一致了。
  • changeOrigin:设置为true可以确保请求头中的Host字段和目标服务器一致,避免一些跨域相关的校验问题。

如果你更倾向于拆分规则,也可以写成两个独立的代理配置,效果是一样的:

devServer: {
  proxy: {
    // 匹配直接访问的路径
    '/activites-digitales': {
      target: 'http://localhost:8082',
      changeOrigin: true
    },
    // 匹配带数字前缀的路径
    '^/\\d+/activites-digitales': {
      target: 'http://localhost:8082',
      changeOrigin: true,
      pathRewrite: { '^/\\d+' : '' } // 移除数字前缀部分
    }
  }
}

这样修改后,无论是带数字参数还是不带的路径,都会被正确转发到8082端口的API啦!

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

火山引擎 最新活动