机架静态无法使用地图

时间:2014-01-20 06:42:28

标签: ruby rack

我有一个简单的机架应用程序:

map "/foo" do
  use Rack::Static, 
    :urls => [""], :root => 'public', :index => 'admin.html'
  run lambda {|env| [200, {}, []]}
end

当我浏览到lvho.st/foo时,我得到了404 File not Found,但如果我转到lvho.st/foo/admin.html,那么它的加载就会很好。

我希望它在admin.html

提供lvho.st/foo

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

你可能已经认识到即使lvho.st/foo可能不起作用,lvho.st/foo/(带有斜杠)也是如此!所以问题是如何跳过检查尾部斜杠或将其附加到所有请求。问题可以通过Passenger / Apache服务器上的小.htaccess重定向来解决,但我们使用的是Ruby,所以这里是Ruby解决方案 - rack-slashenforce gem

在项目文件夹中运行它(或将其附加到Gemfile并运行bundle install):

gem install rack-slashenforce

然后你的Ruby文件看起来像这样:

require 'rack-slashenforce'

# Make sure you declare this outside the map block
use Rack::AppendTrailingSlash
map "/foo" do
  use Rack::Static, :urls => [""], :root => 'public', :index => 'admin.html'
  run lambda {|env| [200, {}, []]}
end

现在每次调用lvho.st/foo都会附加一个斜杠!一切都应该正常。