Sinatra服务器不提供带有'+';名义上

Sinatra服务器不提供带有'+';名义上,sinatra,Sinatra,Sinatra服务器公用文件夹中的某些文件的名称中有“+”。 当我试图通过浏览器访问这些文件时,会出现404错误。没有额外的日志输出 我三次检查文件是否存在,URL是否正确。我可以访问公用文件夹中的其他文件。如果我重命名这些文件,使它们的名称中不包含“+”,我也可以访问它们 不幸的是,我无法避免在文件名中使用“+”字符 以前有过这样的经历吗?Sinatra来源中的罪魁祸首似乎是这样的: path = File.expand_path("#{public_dir}#{unescape(requ

Sinatra服务器公用文件夹中的某些文件的名称中有“+”。 当我试图通过浏览器访问这些文件时,会出现404错误。没有额外的日志输出

我三次检查文件是否存在,URL是否正确。我可以访问公用文件夹中的其他文件。如果我重命名这些文件,使它们的名称中不包含“+”,我也可以访问它们

不幸的是,我无法避免在文件名中使用“+”字符


以前有过这样的经历吗?

Sinatra来源中的罪魁祸首似乎是这样的:

  path = File.expand_path("#{public_dir}#{unescape(request.path_info)}"
谁的行为可以归结为

URI.decode_www_form_component('a+b', 'utf-8')  # returns "a b"
在此行之前,request.path\u info中的任何
+
字符都将替换为空格


听起来您打算将此Web服务器用于的不仅仅是一个简单的项目。在这种情况下,我强烈建议您不要将Sinatra用作文件服务器,而是将其隐藏在反向代理(如nginx)后面,后者对发送文件进行了高度优化。如果nginx找不到该文件,它将把请求转发给sinatra Web服务器处理。

您可以在此处列出一些文件。这可能会有帮助。其中一个文件名是5.5.0-0icu-linux-g++-Rhel6.6-x86.7z.sha1,但我可以用包含“+”的每个文件名重现错误。URL是正确的“如果可能,我想看看你认为什么是正确的URL,使用代码> 5.5.0 0ICU-LUUX-G++-RHEL66X867Z。Sa1我认为你在这里是正确的。我还在sinatra发行板上发布了这一期: