Mixer le contenu de dossiers sur un virtualhost

J’ai envi de vous donner un tip pour pouvoir mutualiser vos fichiers d’un vritualhost sous plusieurs sous dossiers. Cela peut être très utile, par exemple si vous utilisez toujours les mêmes bibliothèques ou bien des images de substitutions sur plusieurs sites.

Tous d’abord il nous faut créer 1 domaine. Rendez-vous dans votre fichier de configuration des hosts sur votre machine.

Sous mac :

/etc/hosts

Sous window :

C:\WINDOWS\system32\drivers\etc\hosts

Puis rajouter les domaines suivants:

127.0.0.1 mon-domain.local

Maintenant il ne nous reste plus qu’à créer nos virtualhosts

Voici comment se structure l’arborescence de nos dossiers

– /chemin/vers/le/dossier/parent
|__ mon-dossier
|__ mon-dossier-de-substitution

Dans l’exemple suivant nous allons faire en sorte que ; dans le cas où un fichier .css ou .js n’existe pas dans mon-dossier, il sera recherché aussi dans mon-dossier-de-substitution

NameVirtualHost mon-domain.local:80

    ServerName mon-domain.local
    DocumentRoot "/chemin/vers/le/dossier/parent"
    SetEnv APPLICATION_ENV "development"

    <Directory "/chemin/vers/le/dossier/parent">
        Options Indexes +FollowSymLinks +Includes
        RewriteEngine on
        RewriteBase /mon-dossier/
        AllowOverride All
        Order allow,deny
        Allow from all
        RewriteRule ^/(scripts|styles)/([^_]*)(?:_[a-z]{2}(?:-[a-zA-Z]{2})?)+\.(js|css)$ /$1/$2.$3 [N]

        RewriteCond %{DOCUMENT_ROOT}/mon-dossier/$0 -f
        RewriteRule ^(.*) /mon-dossier/$1 [L]

        RewriteCond %{DOCUMENT_ROOT}/mon-dossier-de-substitution/$0 -f
        RewriteRule ^(.*) /mon-dossier-de-substitution/$1 [L]
    

Voici l’explication tant attendu, mon-domain.local pointe sur le dossier /chemin/vers/le/dossier/parent. Grâce à la règle RewriteBase, les fichiers seront chargé depuis se dossier.
Par exemple un fichier index.html sera chargé depuis le dossier mon-dossier.

Puis nous ajoutons notre règle sur les fichier .js/.css, contenue respectivement dans les dossiers scripts et styles. Puis les conditions, si l’on trouve dans le dossier mon-dossier alors on prend le fichier, sinon il faut aussi chercher dans mon-dossier-de-substitution. Bien sûr si le fichier n’existe dans aucun des 2 dossiers une 404 sera présente.

RewriteRule ^/(scripts|styles)/([^_]*)(?:_[a-z]{2}(?:-[a-zA-Z]{2})?)+\.(js|css)$ /$1/$2.$3 [N]

RewriteCond %{DOCUMENT_ROOT}/mon-dossier/$0 -f
RewriteRule ^(.*) /mon-dossier/$1 [L]

RewriteCond %{DOCUMENT_ROOT}/mon-dossier-de-substitution/$0 -f
RewriteRule ^(.*) /mon-dossier-de-substitution/$1 [L]
TAGS: , , BY: Nicolas LABBE 0 COMMENT
LIRE LA SUITE

Nicolas LABBE

Si c’est stupide mais que ça marche, ce n’est pas stupide.