2

我正在转换一堆用 php 编写的登录页面,以便将它们添加到我的基于 RoR 的站点(现在已经存在 2 年多了)。这些登录页面分为几个版本,但不幸的是,就 URL 名称而言,它们并没有一致性。我的问题是我正在转换的 php 页面已经有很高的页面排名,因此我想保持它们的 URL 完全一样。

我不确定如何设置我的 routes.rb 以便 example.com/* 将始终转到我的主页;但是,当 (* == 'name-of-one-of-the-landing-pages') Rails 将路由到单独的控制器时,特定的操作将根据初始化程序和参数哈希确定要呈现的页面,所有这一切,而 URL 如前所述,与 php-to-RoR 转换之前的 URL 相同,即 www.example.com/name_of_landing_page,而不是 www.example.com/*controller_name*/name_of_landing_page。

我知道 :path 属性,如果传递一个空字符串(即resources :examples, :path => ''),则可以从路径中排除控制器名称,但这并不能完全解决整个问题。

我正在考虑编写一个初始化程序来保存所有相关登录页面的哈希,并使用 routes.rb 中的约束来检查它,但我不确定这种实现是否可行以及如何去做。一个代码示例将不胜感激。

routes.rb 是否有某种语法可以让我这样做,或者可能是更好的解决方案?

4

2 回答 2

0

要回答第一个问题:在 routes.rb 中,在 do/end 块中,您实际上将处于 的上下文中ActionDispatch::Routing::Mapper,所以不,您不会。但是,在该块之后,您将回到应用程序的顶层,并且可以访问您在初始化程序中初始化的任何变量,但是,该代码可能更适合放在 application.rb 中。

您应该在 routes.rb 中做的唯一一件事就是定义路由。

您还可以处理机架中遗留页面的请求

def call(env)
  request = Rack::Request.new(env)
  return [200, {"Location" => request.url("http://www.example.com")} if request.host == "www.oldpage.com"
end

更多信息在这里:http ://railscasts.com/episodes/222-rack-in-rails-3

于 2013-08-27T14:05:35.003 回答
0

我不明白为什么涉及复杂的事情。设置这样的路线应该很简单。

假设您有一个控制器来处理名为“PagesController”的静态页面

get 'name-of-one-of-the-landing-pages-a', to: 'pages#a'
get 'name-of-one-of-the-landing-pages-b', to: 'pages#b'

无需在路径中添加控制器名称。你可以控制所有这些。

于 2013-08-27T15:00:31.537 回答