为什么不重定向导致无限循环?

时间:2014-08-20 19:59:58

标签: ruby sinatra

.
├── 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'在我的浏览器中。

1 个答案:

答案 0 :(得分:3)

如果文件存在,Sinatra默认启用配置以提供静态文件而不通过路由。来自文档:

  

:static - 启用/禁用静态文件路由

     

布尔值,确定是否应从应用程序的公共目录提供静态文件(请参阅:public_folder设置)。当:静态是真的时,Sinatra将检查是否存在静态文件并在检查匹配路由之前提供它。

     

当公共目录存在时,默认情况下启用静态设置。

如果您将公用文件夹配置为images文件夹,那就是它没有进入重定向循环的原因。