如何在Vercel Rewrites中基于来源自定义URL目标?解决代理重写时目标URL附加星号的问题
解决Vercel Rewrites代理时目标URL末尾带*的问题
我来帮你搞定这个Vercel Rewrites的代理配置问题~你遇到的核心问题是路径参数的语法使用错误,导致Vercel把通配符*当成了目标URL的一部分,从而引发错误。
错误原因分析
你原来的配置里,destination写了:path*,但Vercel的路径参数规则中,*只是source里用来匹配任意后续路径的修饰符,变量本身的名称是path。当你在destination里写:path*时,Vercel会把*当作字面量附加到目标URL末尾,自然会导致无效的URL。
正确的配置方案
这里有两种靠谱的解决方式,你可以根据需求选择:
方案1:修正路径参数的使用
只需要把destination里的:path*改成:path即可,因为source里的:path*已经完整捕获了/proxy/之后的所有内容:
"rewrites": [ { "source": "/proxy/:path*", "destination": "https://:path" } ]
这样当用户访问example.com/proxy/google.com/search?q=hello时,会正确重写代理到https://google.com/search?q=hello。
方案2:使用正则捕获组(更灵活)
如果你需要更精准的路径匹配控制,可以用正则表达式作为source,通过捕获组$1来获取目标地址:
"rewrites": [ { "source": "/proxy/(.*)", "destination": "https://$1" } ]
这种方式和方案1效果一致,但正则可以让你轻松添加域名白名单,避免被滥用,比如只允许代理特定域名:
"rewrites": [ { "source": "/proxy/(google.com|github.com)/(.*)", "destination": "https://$1/$2" } ]
额外注意事项
- Vercel的Rewrites代理是服务器端代理,所以前端不会遇到CORS问题,因为请求是从Vercel服务器发起的。
- 建议添加域名限制,防止恶意用户利用你的代理访问违规网站,避免合规风险。
内容的提问来源于stack exchange,提问作者mapple
相关产品推荐
相关产品推荐

