Multisites : modifier le nom des dossier valide

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,
Je voudrais savoir si il est possible de modifier le comportement de drupal pour le choix du nom de répertoire accepté.
Je m'explique :

  • Sur le serveur locale, nous avons utilisons des ndd avec des extensions en .dev
  • Sur le serveur distant avant que le site soit en prod nous utilisons un sous-domaine du ndd de l'agence
  • Enfin une fois le site en prod nous utilisons le ndd définitif

Ce qui nous donnes les arbos suivantes :

serveur local

  • drupal_dir
    • sites
      • all
      • default
      • monsitededev.dev
      • monautresitededev.dev

serveur distant

  • drupal_dir
    • sites
      • all
      • default
      • monsitededev.ndddelagence.fr
      • monautresitededev.ndddelagence.fr

serveur distant après la mise en prod du site monsitededev > monsiteprod

  • drupal_dir
    • sites
      • all
      • default
      • monsiteprod.fr
      • monautresitededev.ndddelagence.fr

Le problème c'est que à chaque fois il faut modifier le répertoire du site en question et donc pas mal d'entrées de la base...

Est il possible de modifier le comportement de drupal pour qui utilise un nom de répertoir commun à tous les serveurs :

Nouvelle config

  • drupal_dir
    • sites
      • all
      • default
      • monsite
      • monautresitededev
Forum : 
Version de Drupal : 

Et encore c'est simple, mais si en plus tu as différents ndd pour un même site/plateforme (genre au hasard m.monsite.fr), ça devient un véritable enfer ce système.

Alors moi ce que je fais (chacun son truc hein :), je gère cela en deux axes "site" et "plateforme". Là tu as deux sites sur 3 plateformes.

1/ Je crée un dossier par site, peu importe la plateforme, et sans me préocuper du nom de domaine qui accédera concrêtement au site. cela donnerait :

  • sites
    • monsite
    • monautresite

2/ Dans chacun des settings.php de ces deux dossier, je fais des configurations à géométrie variable :

<?php
switch($_SERVER['HTTP_HOST']) {
  case
'monsitededev.dev' :
    {
     
$db_url['default'] = 'pgsql://postgres@localhost/dev_monsite';
      break;
    }
(...)
  case
'monsiteprod.fr' :
    {
     
$db_url['default'] = 'pgsql://postgres@localhost/monsiteprod';
      break;
    }
  case
'monsite' :
    {
     
$db_url['default'] = 'pgsql://postgres@localhost/monsite';
      break;
    }
  default :
    print
"Host inconnu !!!"
   
break;
}
?>

3/ Ok, c'est là que ça se complique un chouilla :) Ici le truc c'est de faire correspondre plusieurs ndd à un dossier dans site qui ne leur correspond pas du tout. Pour cela, pas le choix, il faut hacker le core de drupal, mais c'est super léger. Il suffit de chercher dans includes/bootstrap.inc la fonction conf_path, et de patcher comme ceci :

<?php
$uri
= explode('/', $_SERVER['SCRIPT_NAME'] ? $_SERVER['SCRIPT_NAME'] : $_SERVER['SCRIPT_FILENAME']);
 
 
/* Hack permettant l'utilisation de la variable VHOST */
 
if (isset($_SERVER['VHOST'])) {
     
$server=array( $_SERVER['VHOST']);
  } else {
   
$server = explode('.', implode('.', array_reverse(explode(':', rtrim($_SERVER['HTTP_HOST'], '.')))));
  }
 
// Fin hack
?>

Avec cela, si Drupal détecte une variable VHOST qui porte le nom d'un des dossiers de sites, c'est ce dossier qu'il utilisera.

4/ Bein tout simplement modifier chaque vhosts apache pour rajouter la fameuse variable qui sera transmise à Drupal :
SetEnv VHOST monsite

Voilà, pas forcement simple à mettre en place, mais une fois que c'est en là, tu peux rajouter des sites, et des plateformes à volonté sans plus rien avoir à modifier, et surtout tu peux synchroniser tes sources entres toutes tes machines, y compris les settings.php sans avoir à te casser la tête.

A noter que pour Drupal 7, arrive la notion d'alias de site, un fichier php qui fait le mapping entre ndd et dossier de site qui se trouve à la racine de sites.