J'essaie de configurer Apache et Passenger pour servir une application Rails. Cependant, j'ai également besoin qu'il serve des fichiers statiques à partir d'un répertoire autre que /public et qu'il donne la priorité à ces fichiers statiques sur tout ce qui se trouve dans l'application Rails.
L'application Rails se trouve dans /home/user/apps/testapp
et les fichiers statiques dans /home/user/public_html
. Pour diverses raisons, les fichiers statiques ne peuvent pas être simplement déplacés dans le dossier public de Rails. Notez également que la racine http://domain.com/ doit être servi par le fichier index.html du dossier public_html.
Voici la configuration que j'utilise :
<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>
Cela sert l'application Rails mais donne 404 pour tout contenu statique de public_html. J'ai également essayé une configuration qui utilise DocumentRoot /home/user/public_html
mais cela ne sert pas du tout l'application Rails, probablement parce que Passenger ne sait pas comment traiter la requête.
Il est intéressant de noter que si je change les conditions en !-f et !-d et la règle de réécriture en redirecto vers un autre domaine, cela fonctionne comme prévu (par ex. http://domain.com/doesnt_exist
est redirigé vers http://otherdomain.com/doesnt_exist
)
Comment puis-je configurer Apache pour qu'il serve des fichiers statiques comme celui-ci, tout en permettant à toutes les autres requêtes de continuer à passer ?