2010-03-31 62 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