2010-01-14 38 views
3

我已經切換到Ruby on Rails,目前的問題是重新路由 舊內容,如XXX/dummy.htmlXXX/dummy.php在RoR中。Reroute舊內容(.html/.php等)到Ruby on Rails

究竟是

  1. 孤立的內容(XXX/onlyinstance.html
  2. 內容具有像XXX/dummy1.html一個內部結構的最佳解決方案,XXX/dummy2.html

http://guides.rubyonrails.org/routing.html沒有解釋如何 遷移舊內容。

注意:更改舊鏈接不是一個選項。該網站託管,這不是我的 自己的服務器。由於該域沒有改變,重定向它的解決方案似乎是不必要的......應該有更好的解決方案。

編輯:我發現最好的解決方案實際上是通過weppos描述的方式重新路由它。

所以在公共目錄 添加.htaccess文件和

RewriteEngine敘述重定向永久/XXX.php http://XYZ/XXX

無論出於何種原因,回報率不接受的routes.rb改道。 ..html/.xml 一切正常,.php不起作用。我還沒有找到原因。因爲weppos的答案是 是最好的,所以我會給他50分的賞金,但由於其他人的回答也是有效的,所以我會加註他們。謝謝大家

+0

你是什麼意思與重新路線?將HTML文件放在您的Rails應用程序中,或將其轉換爲Ruby on Rails以實際替換它? – Veger 2010-01-14 13:03:38

+0

您有一個用PHP /(X)HTML /其他編寫的舊網站。現在你打算學習RoR並在實踐中這樣做,除了建立一個新的存在之外,你還希望將舊的鏈接轉換爲RoR。是的,可以簡單地將html文件放在你的RoR目錄中的相同位置(但我覺得有點混亂)。但是,如果您使用* .php結尾,我的服務器將引發500錯誤,並且development.log爲空。 – 2010-01-14 13:46:51

回答

4

你可以用多種方法做到這一點。

最好和最有效的方法是使用您的前端Web服務器。 您可以輕鬆設置一些配置,以便將所有舊網址重定向到新網址。

使用Apache,您可以使用mod_aliasmod_rewrite

Redirect /XXX/onlyinstance.html /new/path 
RedirectMatch ˆ/XXX/dummy([\d])+\.html$ /new/path/$1 

這是最有效的方式既爲服務器和客戶端,因爲在服務器級別進行處理,而不需要初始化Ruby解釋器。

如果您不能/不會利用服務器設置,您可以決定使用Rails本身。 談到性能,最有效的方法是使用比創建完整控制器/操作更有效的Rack middleware

class Redirector 
    def self.call(env) 
    if env["PATH_INFO"] =~ %r{XXX/onlyinstance\.html} 
     [301, {"Content-Type" => "text/html", "Location" => "http://host/new/path/"}, "Redirecting"] 
    else 
     [404, {"Content-Type" => "text/html"}, "Not Found"] 
    end 
    end 
end 

還有一個Rack plugin called Redirect提供了使用Rack中間件配置重定向一個很好的DLS。

只是一個腳註。我不會使用routes.rb創建其他路線,因爲您最終會重複您的網站網址並浪費額外的內存。

另請參閱Redirect non-www requests to www urls in Rails

2

你是什麼意思的遷移?我建議重定向客戶端以使用RoR URL。這可以使用HTTP 301狀態碼完成。請參閱http://en.wikipedia.org/wiki/HTTP_301

HTTP響應狀態碼301永久移動用於永久重定向。

這可以在HTTP服務器的配置中完成。

2

您必須重新定義您的應用程序,因爲Rails使用RESTful路由(您可能已經閱讀過)。因此,爲了有一個處理顯示,創建,銷燬等項目的PHP文件,您需要爲不同的操作構建一個項目Model,Controller和視圖。

您可以複製到公共目錄的靜態HTML文件,因爲它是相同的。你使用的結構仍然可以是相同的。

爲了修改您的路由,您必須將map.resource添加到您的config/routes.rb文件中。這實現了到您的控制器的RESTful路由。要開始使用由Rails(WEBrick)提供的Web服務器,請輸入script/server命令。後來當你有​​更多的經驗時,如果WEBrick不夠用,你可以考慮切換到另一臺服務器。

我建議你先開始用Rails編寫一個基本的(博客)應用程序,請參閱here。所以你會看到Rails使用哪些部分以及如何使用它們。

之後,您可以在您的PHP解決方案中識別這些部分,並且能夠更好地轉換您的頁面。至少我在開始使用/從PHP轉換爲Rails時採用了這種方法。

+0

來自其他網站的鏈接指的是「XYZ/xyz.php」。現在你的意圖是,如果是這樣。點擊鏈接,即使它不是PHP,也可以將瀏覽器重新路由到任何地方。假設你想自動啓動XYZ/xyz作爲RoR應用程序,如果是的話。在您的瀏覽器中插入「XYZ/xyz.php」。 這是否可以在編程的情況下無法訪問狀態碼重定向? RoR中有沒有(如路由)能夠做到這一點? – 2010-01-14 17:29:53

+0

我從來沒有嘗試過這樣的,但是這樣的應該是可能的:'map.resource'/XYZ/xyz.php',:controller =>:XYZController,:action =>:index',現在RoR接管索引行動。從那裏用戶可以完全訪問應用程序。 **但是**即使不使用PHP,保持以'.php'結尾的URL對我來說似乎很奇怪。所以在某些時候,你真的需要/想要遷移到一個完整的RoR站點......爲什麼不現在開始並部分轉換一切? – Veger 2010-01-14 18:11:14