路由到 /public 中的静态 html 页面
Posted
技术标签:
【中文标题】路由到 /public 中的静态 html 页面【英文标题】:Routing to static html page in /public 【发布时间】:2011-08-03 14:54:07 【问题描述】:如何在 Rails 中路由 /foo
以显示 /public/foo.html
?
【问题讨论】:
可能重复:***.com/questions/1146624/… 赛义德,这不是那个问题的骗局,因为那个问题是指维护布局等。 请注意,如果您尝试设置静态欢迎页面或其他内容,如果未指定其他内容,rails 将自动显示public/index.html
。
【参考方案1】:
你可以这样做:
将此添加到您的 routes.rb 文件中。
match '/foo', :to => redirect('/foo.html')
更新
在 Rails 4 中,它应该使用“get”,而不是“match”:
get '/foo', :to => redirect('/foo.html')
感谢Grant Birchmeier
【讨论】:
如果您要重定向到公开的资产,您可能需要redirect('/foo.html')
(没有/public)
在 Rails 4 中,它应该是get '/foo', :to => redirect('/foo.html')
(“get”而不是“match”)。
有没有办法做到这一点,它发送文件的内容而不是重定向?
@Emily 我建议您使用控制器来发送文件的内容。请参阅此链接:apidock.com/rails/ActionController/Streaming/send_file。但是,这样的事情应该有效。匹配 "/foo", :to => proc |env| [200, , [File.open(Rails.root.join('config', 'routes.rb')).read]] ,通过::get
部署到 Heroku,这会产生一个重定向循环。让登录页面在 Rails 中工作是如此复杂,令人困惑......【参考方案2】:
这可以在不触发重定向的情况下完成。按照下面的步骤,可以在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
-
安装 rails-static-router gem:https://github.com/mufid/rails-static-router#installation
重新启动应用(首先
bin/spring stop
以确保应用完全重新加载)。
开始在您的config/routes.rb
中使用static(path)
方法。
【讨论】:
万一有人试图将它用于 Rails 5,必须更改语法。省略第二个参数,所以应该只有ActionDispatch::FileHandler.new(Rails.configuration.paths["public"].first)
链接到ActionDispath::FileHandler和链接到Redirect<Endpoint
不要问我为什么,但这在生产中对我来说很糟糕,除非我在顶部有 require 'action_dispatch/middleware/static'
...【参考方案3】:
例如在 Rails 4 中添加以下路由:
get '/example', :to => redirect('example.html')
您还需要在配置中启用“公共”目录中的静态文件:
config.serve_static_files = true
或
config.serve_static_assets = true
此外,您可能需要在 nginx 配置中以 root 身份提供您的公共目录。
【讨论】:
以上是关于路由到 /public 中的静态 html 页面的主要内容,如果未能解决你的问题,请参考以下文章
播放框架:如何用静态 js 和 css 渲染静态 HTML 页面?