2010-03-31 57 views
1

我正在RoR中開發一個應用程序,其中包含靜態和動態部分。靜態部分放置在應用程序的公共/文件夾中。現在,如果我在公共文件夾中有一個index.html,那麼我將無法使用在routes.rb中配置的路線。像map.connect /:controller /:action的默認配置將不可用,如果我有一個index.html。所以我刪除了索引html。Ruby on Rails - 靜態頁面作爲起始頁面

現在我有一個靜態頁面startpage.html在我的公共/文件夾中必須是應用程序的起始頁面。而我有其他靜態/動態頁面的鏈接。

RoR應用程序託管在apache中,我嘗試通過添加DirectoryIndex參數來配置虛擬主機配置,以便在有任何請求來到站點時它會將其指向startpage.html,但仍然需要我我已經在routes.rb中與map.root指定的默認控制器

我不想添加一個虛擬控制器和行動,並創造出具有起始頁一個視圖,並配置routes.rb中使用它作爲根。我在這裏要做的是

基本上startpage.html應該是我的應用程序的第一頁作爲公共/文件夾的靜態頁面。然後這將有其他網頁和控制器/動作

這裏我不能夠重定向到html頁面,而不是將控制傳遞到rails應用程序。通過使用選項索引也可以啓用目錄列表,但仍然沒有更改。

任何指針的人?

回答

6

現在,如果我在我的公用文件夾index.html的話,我將無法使用路由配置在我的routes.rb。

這是不正確的。您的問題的解決方案是將startpage.html重命名爲index.html,這將導致請求/index.html提供服務,並且任何請求/:controller/:action將傳遞到Rails路由引擎。

Apache將首先在public目錄中找到任何可以找到的東西。如果它不可用,那麼它將請求傳遞給Rails(這是頁面緩存的工作方式)。

隨着index.html的地方,你不需要map.root,因爲它永遠不會要求(請記住,Apache的供應/index.html)。而且你也不需要任何特殊的指令。

+0

Jonathan, 感謝您指出錯誤。我從我的路由文件中刪除了map.root配置,添加了startpage.html作爲index.html。事情工作正常。 無論如何都有映射互斥。我的意思是,只有當我第一次點擊「/」時,我應該得到index.html,並且對於後續的「/」請求應該由map.root配置來保證。 考慮一個樣例場景,如登錄頁面。所以第一頁(index.html)就是登錄頁面。所以,一旦登錄,我不應該被移回到登錄頁面,當我意外/故意要求「/」 – meetraghu28 2010-03-31 12:17:04

+0

你所描述的可以在一個'root_controller'作爲交換機。將index.html重命名爲startpage.html。添加'map.root:controller =>:root'。然後在'root_controller'中:'render:file =>'startpage.html''如果沒有登錄,'redirect_to account_path'或者用戶*登錄時的東西。 – 2010-03-31 12:33:57

+0

好吧,那肯定是可行的。但我想知道爲什麼我們必須進入任何控制器或軌道引擎才能做到這一點。對於首頁或登錄頁面,當內容完全靜態時,轉到引擎可能會稍微減慢頁面的加載時間,這是沒有意義的。 – meetraghu28 2010-03-31 12:46:35

0

你可以從index.html的你startpage.html取得了URL重寫

RewriteRule /index.html /startpage.html 
+0

嘿...基本上我的要求是映射到/startpage.html 我試圖映射到/startpage.html使用RewriteRule但仍然是請求到達rails引擎。 – meetraghu28 2010-03-31 12:06:28

+0

要清除 - 請求是要映射「xyz.com/」到「xyz.com/startpage.html」 – meetraghu28 2010-03-31 12:15:19