2009-12-05 115 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