.
├── public
│ └── imgs
│ └── alien1.png
└── routes.rb
#routes.rb
require 'sinatra'
get "/imgs/*.*" do
puts "****"
redirect to('/imgs/alien1.png')
end
当我在浏览器中输入以下网址时:
http://localhost:4567/imgs/blah.jpg
匹配routes.rb中的唯一路由,因此执行重定向,并在我的浏览器中显示alien1.png。但为什么重定向不再与路线匹配?
如果我这样做:
require 'sinatra'
get "/dog" do
'woof woof'
end
get "/imgs/*.*" do
puts "***"
redirect to("/dog")
end
...重定向命中/ dog路由,它的块执行显示&wo; woof woof'在我的浏览器中。
答案 0 :(得分:3)
如果文件存在,Sinatra默认启用配置以提供静态文件而不通过路由。来自文档:
:static - 启用/禁用静态文件路由
布尔值,确定是否应从应用程序的公共目录提供静态文件(请参阅:public_folder设置)。当:静态是真的时,Sinatra将检查是否存在静态文件并在检查匹配路由之前提供它。
当公共目录存在时,默认情况下启用静态设置。
如果您将公用文件夹配置为images文件夹,那就是它没有进入重定向循环的原因。