路由到/ public中的静态html页面


71

如何路由/foo/public/foo.html在Rails中显示?



4
赛义德,它不是问题的欺骗,因为这个问题指的是保持布局等
威廉·丹尼斯

1
请注意,如果您尝试设置静态的欢迎页面,或者public/index.html如果未指定其他任何内容,rails将自动显示。
1712年

Answers:


108

你可以这样做:

将此添加到您的routes.rb文件中。

match '/foo', :to => redirect('/foo.html')

更新资料

在Rails 4中,它应该使用“ get”,而不是“ match”:

get '/foo', :to => redirect('/foo.html')

感谢Grant Birchmeier


2
如果您要重新定向到公共资产,则可能需要redirect('/foo.html')(不使用/ public)
bentytree 2011年

11
在Rails 4中,它应该是get '/foo', :to => redirect('/foo.html')(“ get”而不是“ match”)。
Grant Birchmeier 2013年

30
有没有办法在发送文件内容而不是重定向的地方执行此操作?
艾米丽

10
@Emily我建议您使用控制器来发送文件的内容。请参阅以下链接:apidock.com/rails/ActionController/Streaming/send_file。但是,这样的事情应该起作用。匹配“ / foo”,:to => proc {| env | [200,{},[File.open(Rails.root.join('config','routes.rb'))。read]]},通过::get
Arkan,

1
部署到Heroku,将产生一个重定向循环。令人困惑的是,要着陆页才能在铁轨中工作……
。– matanster

15

无需触发重定向即可完成此操作。按照下面的步骤进行操作,以便能够路由静态文件,config/routes.rb如以下示例所示:

# This route will serve public/index.html at the /login URL 
# path, and have a URL helper named `login_path`:
get "/login", to: static("index.html")

# This route will serve public/register.html at the /register
# URL path, and have URL helper named `new_user_registration_path`:
get "/register", to: static("register.html"), as: :new_user_registration
  1. 安装rails-static-router gem:https : //github.com/mufid/rails-static-router#installation
  2. 重新启动应用程序(首先 bin/spring stop确保应用程序已完全重新加载)。
  3. 开始使用中的static(path)方法config/routes.rb

3
以防万一有人尝试将其用于Rails 5,必须更改语法。省略第二个参数,所以应该只是ActionDispatch::FileHandler.new(Rails.configuration.paths["public"].first)
waza


2
不要问我为什么,但这会在生产中给我炸毁,除非我有require 'action_dispatch/middleware/static'最高的
职位

0

例如在Rails 4中添加以下路线:

get '/example', :to => redirect('example.html')

另外,您还需要在配置中启用“ public”目录中的静态文件:

config.serve_static_files = true

要么

config.serve_static_assets = true

另外,您可能需要在NGINX配置中以root用户身份提供公共目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.