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

Phoenix router中含正斜杠的name参数被误判为路由分段如何解决?

可以通过自定义路由参数的匹配正则来实现允许name参数包含斜杠,Phoenix默认的路由参数匹配规则是[^/]+,即不会匹配路径分隔符斜杠,修改正则规则即可突破这个限制。


实现方案

因为你当前的配置里有嵌套的/quote子路由,需要优先保证固定路由的匹配优先级,推荐的修改方式如下:

  1. 先手动注册所有固定路径的子路由,避免被参数路由提前匹配
  2. 给resources的param选项传入二元组,自定义name参数的匹配正则为可包含任意字符(包含斜杠)

修改后的路由配置示例:

scope "/api", AppWeb do
  scope "/pricing" do
    # 优先注册固定的quote路由,优先级高于通用参数路由
    get "/inventory/:name/quote", InventoryController, :quote, as: :pricing_inventory
    # 自定义name参数匹配规则,允许包含斜杠
    resources("/inventory", InventoryController, param: {"name", ~r".+"})
  end
end

注意事项

  • 路由是按代码书写顺序从上到下匹配的,所有固定路径的路由必须放在带通用正则参数的路由之前,否则固定路由会被参数路由覆盖
  • 如果name参数有明确的格式规则,建议缩小正则的匹配范围(比如如果name只允许字母、数字和斜杠,可以写成~r"[A-Za-z0-9/]+"),避免不必要的路由匹配风险
  • 建议前端传输带特殊字符的参数值时先做URL编码,Phoenix会自动对拿到的参数值做解码,无需后端额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:27:03