我目前正在开发一个基于Rack的应用程序,并希望重定向所有文件请求(例如filename.filetype
)到指定的文件夹。
Rack::Static
仅支持特定文件夹(例如“/media”)的文件请求。
我必须编写自己的Rack中间件,还是存在现成的解决方案?
为了将每个请求重定向到特定路径,请使用Rack::File
(因为某些原因,最近的文档中缺少此类,但它仍然是最新版Rack的一部分):
run Rack::File.new("/my/path")
要重定向每个请求,并在目标目录中添加所有文件的HTML索引,请使用Rack::Directory
:
run Rack::Directory.new("/my/path")
要合并几个目录或仅从目标目录服务于一些请求:
map "/url/prefix" do
run Rack::File.new("/my/path")
end
# More calls to map if necessary...
# All other requests.
run MyApp.new
use Rack::Static, :urls => ["/media"]
将服务于 ./media
文件夹下的所有静态资源,相对于 config.ru
的位置。
你可能可以直接使用Rack::File
。下面是一个config.ru
文件,你可以插入到rackup中查看它的工作方式:
app = proc do |env|
Rack::File.new('foo/bar').call(env)
end
run app
run Rack::Directory.new(Dir.pwd)