Je vais gérer plusieurs sous-domaines, éventuellement trop nombreux pour que chacun puisse avoir ses propres fichiers de configuration. J'ai les vhosts qui fonctionnent comme je le souhaite, chaque sous-domaine a son propre dossier, par exemple /web/test, qui servira les pages web de ce sous-domaine. Je veux que chaque sous-domaine ait son propre projet SVN et trac, par exemple http ://test.mastersiege.com/trac, mais le problème est que l'on ne peut pas utiliser de variables dans Apache.
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/trac/$1
PythonOption TracUriRoot /trac
</Location>
où $1 = sous-domaine. et je ne peux pas lier symétriquement le dossier trac dans le dossier home du sous-domaine et ensuite utiliser la racine doc de vhost_alias comme TracEnv. J'ai essayé d'écrire un script Perl script dans les fichiers de configuration d'Apache qui analyse le sous-domaine à partir de l'URL, comme suit Utiliser dynamiquement une URL dans un conteneur Vhost avec mod_perl b
use Apache2::ServerRec () ;
use Apache2::ServerUtil ();
use Apache2::RequestRec ();
use Apache2::RequestUtil ();
use Apache2::Const qw/OK DECLINED/;
my $s = Apache2::ServerUtil->server;
$s->push_handlers(PerlHeaderParserHandler => sub { my($r) = @_;
if ( $r->hostname =~ m/(.*)\.([^.]+\.\w+)$/ ) {
my($subdomain,$domain) = ($1,$2);
my($TracPath) = "TracEnv /srv/trac/"+$subdomain;
my($TracUri) = "TracUriRoot /testTrac";
$Location{"/testTrac/"} = {
SetHandler => "mod_python",
PythonInterpreter => "main_interpreter",
PythonHandler => "trac.web.modpython_frontend",
PythonOption => $TracPath,
PythonOption => $TracUri
};
if ( $@ ) { warn $@ }
return OK;
} else {
return DECLINED;
}
});
</Perl>
C'est mon premier script perl script donc je ne suis pas sûr Il est possible d'utiliser cgi pour trac ce qui résoudrait le problème mais c'est environ 100x plus lent que mod_python.