在 Nginx - Puma - Rails 堆栈中,URI 应该在哪里解码?

Where should URIs be decoded in a Nginx - Puma - Rails stack?

我有一个 Rails 应用需要接受一些带有未编码 %2f(正斜杠)的 URI。这些字符需要被解释为正斜杠,尽管我知道这并不理想。

这样做的最佳解决方案是什么?我正在考虑 nginx 重写规则或自定义机架中间件。是否有任何其他解决方案或建议的方法?

我们最终使用以下中间件完成了它:

class SlashDecoder
  def initialize(app)
    @app = app
  end

  def call(env)
    env["PATH_INFO"] = env["PATH_INFO"].gsub(/%2[fF]/, "/") if env["REQUEST_METHOD"] == "GET"
    @app.call(env)
  end
end