Sinatra Server无法使用' +'在名字中

时间:2015-09-08 15:08:11

标签: sinatra

我的Sinatra服务器公共文件夹中的一些文件有一个' +'在他们的名字。 当我尝试通过浏览器访问这些文件时,出现404错误。没有额外的日志输出。

我三重检查文件是否存在且URL是否正确。我可以访问公用文件夹中的其他文件。如果我重命名这些文件,那么他们就不会包含' +'在他们的名下,我也可以访问它们。

不幸的是,我无法避免让' +'我的文件名中的字符。

之前是否经历过?

1 个答案:

答案 0 :(得分:0)

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_info中的任何+个字符都替换为空格。

听起来您打算将此网络服务器用于一个简单的项目。在这种情况下,我强烈建议您不要将Sinatra用作文件服务器,而是将其隐藏在反向代理之后,例如nginx,它非常适合发送文件。如果nginx找不到该文件,它会将请求转发给sinatra webserver来处理。