我的Sinatra服务器公共文件夹中的一些文件有一个' +'在他们的名字。 当我尝试通过浏览器访问这些文件时,出现404错误。没有额外的日志输出。
我三重检查文件是否存在且URL是否正确。我可以访问公用文件夹中的其他文件。如果我重命名这些文件,那么他们就不会包含' +'在他们的名下,我也可以访问它们。
不幸的是,我无法避免让' +'我的文件名中的字符。
之前是否经历过?
答案 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来处理。