路由-创建指向外部URL的Rails路由

我的许多用户都继续浏览http://(rails app URL)/blog,但实际上我没有博客。 我终于建立了一个Posterous博客,现在想将我的用户定向到那里。 有没有一种方法可以使用routes.rb进行配置? 有没有一种更好的方法,不涉及编辑httpd.conf文件?

Chris asked 2020-06-27T13:34:57Z
4个解决方案
65 votes

我知道这很旧,所以如果有人需要它用于护栏4:

get "/blog" => redirect("http://example.com/blog")

在Rails 4中使用get代替Match,否则会出现运行时错误

nil answered 2020-06-27T13:35:54Z
62 votes

取决于您使用的Rails版本。

导轨3

# in routes.rb
match "/blog" => redirect("http://example.com/blog"), :as => :blog

滑轨2

# in routes.rb
map.blog '/blog',
  :controller => "a_helper_controller",
  :action => "redirect_to_blog"

# in a_helper_controller.rb
def redirect_to_blog
  redirect_to "http://example.com/blog"
end
Marcel Jackwerth answered 2020-06-27T13:35:30Z
13 votes

对于Rails 5:

get '/stories', to: redirect('/articles')
get '/stories', to: redirect('http://google.com')

Rails指南源页面

vitkoz answered 2020-06-27T13:36:19Z
0 votes

将前端路由模拟为常规的Rails控制器路由

背景:最初有Rails整体渲染html视图。 然后是前端React应用程序,需要将后端转换为JSON API,并生成指向前端应用程序的URL(主要在电子邮件中),该前端应用程序的行为几乎完全类似于Rails控制器。

我一直在寻找一种模仿Rails资源的方法来构造URL,但要指向前端URL并生成适当的path_helpers,可以轻松地与我的应用程序,RSpec,cucumber / Capybara等一起使用。 我发现此路由周围的hack可以模拟前端路由,这还需要传递额外的参数以完全消除歧义的前端VS后端路由(在水豚测试中很有用)

frontend_scope = {
  as: :frontend,
  host: Rails.configuration.frontend_host, # like https://www.example.com
  port: Rails.configuration.frontend_port, # 443
  constraints: (lambda { |request| request.params[:app] == :frontend })
}
scope(frontend_scope) do
  root to: 'static_pages_controller#home'
  resources :articles, only: [:show, :index]
end

然后在我的Ruby代码中,我可以使用

frontend_article_url(@article, app: :frontend)
frontend_articles_url(app: :frontend)
... (and everything that can be generated in a classic rails app)

不方便的是,您的重定向中将有app参数,您必须在前端应用程序+所有其他网络应用程序(例如Google Analytics(分析),搜索引擎等)上忽略该参数。

*问题在于,如果您的前端同时有/articles,而后端有/articles,那么在没有额外参数帮助的情况下,您的应用将无法使用解析为同一URL的两种路由来发挥作用

Cyril Duchon-Doris answered 2020-06-27T13:37:02Z
translate from https://stackoverflow.com:/questions/3622706/creating-a-rails-route-to-an-external-url