2009-12-05 95 views
2

我为我的组织开发了一个新的Ruby on Rails站点。我希望新的Rails站点拦截传入的针对旧网站的请求,并向用户显示一条消息,指示新网站已启动,链接为他们最可能尝试访问的新网址,并提醒更新书签。从Drupal迁移到Rails - 路由

所以我非常的绿色,当涉及到铁路路由,所以我问你会如何做到这一点。有没有'铁轨方式'?

以下是我的想法。

旧网站不使用干净的网址,因此每个请求都转到缺省路由,在新网站中,该网址是带有查询字符串的home控制器。我在控制器中想的是,我可以测试,看看是否设置了params[:q],然后根据q参数是什么,搜索并呈现将用户引导到新链接的信息页面。如果q参数没有意义(我不在意抓住旧网站上的每一页,只是重要的那一页),而是重定向到一个自定义404页面,通知用户该链接可能适用于旧网站,并给予用户一个搜索页面。

任何想法,有没有更好的方法?

我很欣赏任何输入。

感谢

回答

1

在你的Rails负责网页控制器(让我们说这是HomeController的)添加的before_filter像这样:

class HomeController < ActionController::Base 
    before_filter :handle_drupal_requests, :only => :index 

然后添加处理方法本身handle_drupal_requests像这样。

class HomeController < ActionController::Base 
    before_filter :handle_drupal_requests, :only => :index 

    # ... other code ... 

private 
    def handle_drupal_requests 
    if params[:q].present? 
     flash[:notice] = "You're being redirected because blah." 
     redirect_to convert_drupal_url(params[:q]), :status => 301 
    end 
    end 

    def convert_drupal_url(query_string) 
    # your logic for converting query string, for example: 
    item, id = query_string.split('&').last.split('=') 
    item_controller = item.underscore.split('_').first.pluralize 
    {:controller => item_controller, :action => "show", :id => id} 
    end 
end 
+0

谢谢... This works great。对于迟到的回复感到抱歉,在回到本文之前,我转向了其他一些问题。 – raytiley 2009-12-12 21:26:31

1

有一个一致的方式对网址有哪些变化?如/?q=pie变成/dessert/pie

如果没有,并且需要某种手动数据库查询,则必须按照您提及的方式进行。我会创建一个redirect操作,捕捉所有路径以使其与您的主页/索引操作分开。

另外,如果你关心SEO汁,确保使用301重定向:

redirect_to dessert_url, :status=>301 

你将不得不做一个即时重定向(无中间页说“更新您的书签”)。我会做的是即时重定向,并将闪光[:通知]消息说“请更新您的书签”。

如果您需要更直接的示例,请发布一些URL示例。

+0

我担心从Web服务动态加载内容的URL以及有问题的资源的ID在查询字符串中传递。例如/?q = node12&ShowID = 100会将您带到显示ID为100的节目的显示信息的页面。 – raytiley 2009-12-05 22:13:44

+0

***添加到上述评论*** 上述资源的新URL映射到将是/ shows/100 资源的ID在两个站点之间保存 – raytiley 2009-12-05 22:15:24

+0

很好。 hakunin给出了一个更具体的例子。如果旧的URL除查询字符串之外还有路径(即./ some/path?q = 1),则必须将before_filter放入application_controller.rb中。那么你甚至不必担心你的routes.rb捕获旧的URL。 – lamplighter 2009-12-07 17:01:34