configurationApache + Passenger以从不同目录提供静态文件

我试图设置Apache和乘客服务的Rails应用程序。 不过,我也需要它来提供非公开目录中的静态文件,并优先于这些静态文件在Rails应用程序中的任何东西。

Rails应用程序位于/home/user/apps/testapp/home/user/public_html的静态文件。 由于各种原因,静态文件不能简单地移动到Rails公用文件夹。 另请注意,根目录http://domain.com/应该由public_html文件夹中的index.html文件提供。

这是我正在使用的configuration:

 <VirtualHost *:80> ServerName domain.com DocumentRoot /home/user/apps/testapp/public RewriteEngine On RewriteCond /home/user/public_html/%{REQUEST_FILENAME} -f RewriteCond /home/user/public_html/%{REQUEST_FILENAME} -d RewriteRule ^/(.*)$ /home/user/public_html/$1 [L] </VirtualHost> 

这对Rails应用程序来说很好,但是对于来自public_html的任何静态内容给出了404。 我也尝试了一个使用DocumentRoot /home/user/public_html的configuration,但是根本不提供Rails应用程序,可能是因为Passenger不知道处理请求。

有趣的是,如果我将条件更改为!-f和!-d,并将重写规则更改为redirect到另一个域,则按预期工作(例如http://domain.com/doesnt_exist被redirect到http://otherdomain.com/doesnt_exist

我如何configurationApache来提供这样的静态文件,但允许所有其他请求继续乘客?

问题是一个学校的男孩mod_rewrite错误 – 为了运行RewriteRule,上面的RewriteCond语句都需要被满足,这当然是不会的。 这是我的错,因为从负面条件testing中复制这一点,并没有意识到他们将不得不分开。 虽然烦人,我需要两个RewriteRule语句,这完美的作品:

  RewriteCond /home/user/public_html%{REQUEST_URI} -f RewriteRule ^ /home/user/public_html%{REQUEST_URI} [L] RewriteCond /home/user/public_html%{REQUEST_URI} -d RewriteRule ^ /home/user/public_html%{REQUEST_URI} [L]