J'essaye d'écrire un ensemble de règles mod_rewrite qui permettent à mes utilisateurs d'utiliser un seul dossier pour faire du développement sur différents projets, et ne pas avoir à jouer avec l'ajout de vhosts pour chaque projet.Apache mod_rewrite un sous-domaine dans un sous-dossier (via redirection interne)
Mon idée pour accomplir ceci, est de mettre en place un "Global VHost" pour chaque utilisateur qui a besoin de cette capacité (seulement 3-4), le vhost serait quelque chose comme: .my-domain.com. De là, je veux promouvoir mes utilisateurs à écrire du code comme si c'était sur un domaine, et non dans un sous-dossier. Par exemple, si Bob travaillait sur un projet nommé 'gnome', je voudrais charger l'URL de bob (et toute autre personne sur notre réseau interne) pour arriver à ce projet: http://gnome.bob.my-domain.com. Mais, ce que j'aimerais qu'Apache fasse, c'est reconnaître que "gnome" est un "projet" et donc mapper la requête, en interne, sur bob.my-domain.com/gnome/.
J'ai ce que je pensais fonctionner, et c'est assez simple, mais ça ne marche pas! La requête passe simplement dans une boucle infinie et conserve le préfixe du sous-domaine sur l'URI réécrit de la requête.
Le code mod rewrite i have est:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([^.]+)\.bob\.my-domain\.com
RewriteCond %{REQUEST_URI} !^/%1.*
RewriteRule ^(.*)$ /%1/$1 [L]
J'ai googlé autour d'un peu à ce sujet, mais je n'ai pas encore trouver de véritables solutions qui fonctionnent. Est-ce que quelqu'un a essayé cela - ou peut-être, quelqu'un a-t-il une meilleure idée? Un qui n'implique pas de faire un hôte virtuel pour chaque projet (j'ai des concepteurs .. Je pense que tout le monde serait d'accord qu'un concepteur ne devrait pas faire des hôtes virtuels ..)
Merci!
Voici un extrait de la rewrite_log:
[rid#838dc88/initial] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/index.html -> index.html
[rid#838dc88/initial] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'index.html'
[rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^.]+)\.bob\.my-domain\.com' => matched
[rid#838dc88/initial] (4) [perdir /home/bob/http/] RewriteCond: input='/index.html' pattern='!^/%1.*' => matched
[rid#838dc88/initial] (2) [perdir /home/bob/http/] rewrite 'index.html' -> '/gnome/index.html'
[rid#838dc88/initial] (1) [perdir /home/bob/http/] internal redirect with /gnome/index.html [INTERNAL REDIRECT]
[rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] strip per-dir prefix: /home/bob/http/gnome/index.html -> gnome/index.html
[rid#8392f30/initial/redir#1] (3) [perdir /home/bob/http/] applying pattern '^(.*)$' to uri 'gnome/index.html'
[rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='gnome.bob.my-domain.com' pattern='^([^\.]+)\.bob\.my-domain\.com' => matched
[rid#8392f30/initial/redir#1] (4) [perdir /home/bob/http/] RewriteCond: input='/gnome/index.html' pattern='!^/%1.*' => matched
[rid#8392f30/initial/redir#1] (2) [perdir /home/bob/http/] rewrite 'gnome/index.html' -> '/gnome/gnome/index.html'
[rid#8392f30/initial/redir#1] (1) [perdir /home/bob/http/] internal redirect with /gnome/gnome/index.html [INTERNAL REDIRECT]
[rid#8397970/initial/redir#2] (3) [perdir /home/bob/http/] add path info postfix: /home/bob/http/gnome/gnome -> /home/bob/http/gnome/gnome/index.html
Ceci est juste un extrait, il y a quelques 10s ou quelque 100 lignes de apache ré-écriture essentiellement /gnome/index.html à/gnome/gnome /gnome/gnome/gnome/index.html, etc avant sa frappe apache limite de réécriture, donne, et lancers francs erreur 500
Ajout d'un peu plus d'informations à partir des journaux de réécriture, j'espère que quelqu'un a déjà essayé cela, ou a des commentaires sur la façon dont je peux y arriver! Merci les gars (et les filles) –