Mutualisation site maitre puis sites dans sous dossiers

Bonjour,

Je n'ai pas trouvé comment mutualiser un spip beta afin que j'obtienne

un site maitre : www.mon_site.net

puis de sites : www.mon_site.net/autre_site

et

www.mon_site.net/autre_site2.

Merci pour m'éclaircir

Rainer

Rainer Müller a écrit :

Bonjour,

Je n'ai pas trouvé comment mutualiser un spip beta afin que j'obtienne

un site maitre : www.mon_site.net

puis de sites : www.mon_site.net/autre_site

Ok, tu souhaites donc mutualiser des répertoires pour qu'ils deviennent des sites autonomes et en plus avoir un site sur la racine.

Je dirai que c'est le plus dur de tous à réaliser, mais ça reste simple.
(Si tu veux compléter la doc avec ce que tu comprendras de mes explications, n'hésite pas !)

On va partir (pour faire plus simple) d'un SPIP neuf, non installé (seuls les fichiers de SPIP sont présents, mais l'installation n'est pas encore faite).
- utiliser le plugin "mutualisation facile" et copier ses fichiers dans un répertoire /mutualisation par exemple.
- créer un répertoire /sites qui recevra les sites (dont le site à la racine de SPIP) avec des droits d'écriture pour apache dessus (chmod 777 par exemple)
- créer un fichier /config/mes_options.php et introduire un morceau de code qui permet de détecter si l'url est un répertoire à mutualiser ou non et de lancer une mutualisation dessus. (le code collé après)
- comme indique dans ce code, mon exemple est base sur création automatique de base de donnée et d'utilisateurs SQL. Il faut donc avoir un compte mysql qui le permette (un utilisateur ayant des droits d'administration, comme root)
- copier le htaccess.txt en .htaccess et editer le pour ajouter dans "parametres personnalises" les lignes (choisir) :

# code generique
RewriteCond %{REQUEST_URI} !^/(config|dist|ecrire|IMG|prive|plugins|sites|squelettes|tests|tmp|lib|local|mutualisation)/(.*)
RewriteRule ^[^/]+/(.*) /$1 [QSA,L]

# OU code specifique
#RewriteRule ^(premier_site|second_site)$ /$1/ [R,L]
#RewriteRule ^(premier_site|second_site)/(.*) /$2 [QSA,L]

------
Vous n'avez plus qu'a installer les différents sites

----
Code de config/mes_options.php

<?php

$mutualisation = true;
if ($mutualisation){

  // mutualisation
  if (!defined("_ECRIRE_INC_VERSION")) return;
  // charger la librairie de mutualisation
  require _DIR_RACINE . 'mutualisation/mutualiser.php';

  // tester si c'est une repertoire non SPIP
  if (
    (
      preg_match(',^/([\.a-zA-Z0-9_-]+)/,', $_SERVER['REQUEST_URI'], $r) // un repertoire est demande
      AND ($_SERVER['HTTP_HOST'] == 'tipi.magraine.net') // qui appartient au domaine mutualise
      AND !is_dir(_DIR_RACINE . $r[1]) // qui n'est pas un dossier existant
    )
  ) {
    // si c'est un repertoire, le site prend le nom de celui-ci
    $site = $r[1];
  } else {
    // sinon on prend le nom du domaine ou sous-domaine+domaine
    $site = $_SERVER['HTTP_HOST'];
  }

  // je considere un SPIP = une base de donnee distincte
  // le prefixe des tables peut donc etre toujours 'spip'
  $GLOBALS['table_prefix'] = 'spip';

  // parametres de base de donnee
  // avec creation user automatique
  // pour chaque site
  
  // tous du mysql
  // (mais on pourrait tester $site pour mettre certains sur d'autres serveurs de donnees)
  define ('_INSTALL_SERVER_DB', 'mysql');

  define('_INSTALL_HOST_DB', 'localhost'); // adresse de la bdd
  define('_INSTALL_USER_DB_ROOT', 'marcimat'); // utilisateur eyant des droits de creation de bdd
  define('_INSTALL_PASS_DB_ROOT', '********'); // mot de passe de l'utilisateur
  define('_INSTALL_TABLE_PREFIX', 'spip'); // idem a $GLOBALS['table_prefix']
  define('_INSTALL_NAME_DB', 'mu_'.prefixe_mutualisation($site)); // nom unique de la bdd creee
  demarrer_site($site,
      array(
      'cookie_prefix' => true, // cookies differents pour chaque sites
      'table_prefix' => false, // deja defini, pas besoin de le calculer
      'creer_site' => true, // on force la creation du site s'il n'existe pas
      'creer_base' => true, // on force la creation de la bdd
      'creer_user_base' => true, // on force la creation d'un utilisateur pour cette bdd
      'mail' => 'marcimat@...', // un mail sera envoye ici lors d'une creation
      'code' => 'codesecret', // code qui sera demande pour autoriser une creation de site
      //'url_img_courtes' => true // ne fonctionne pas avec une mutualisation de repertoire
      )
  );

}

?>

Bonne découverte !

--
MM.

Merci pour cette réponse rapide et très bien expliquée.

Voilá mon retour d’expérience

Installation

Avec la configuration que tu as proposé l’installation finissait toujours avec un échec de connections.

J’ai donc modifier les paramètres de mes_options afin que l’installation de la bdd ne soit pas forcé (voir ci-bas)

Ensuite, j’ai bien réussi à installer tant le site maitre comme le site secondaire.

L’installation était normale, sauf que à partir de moment ou les répertoire sont installé et quand spip procède à l’installation de la base de donnée a chaque étape apparait un erreur 302 avec le lien Si votre navigateur n’est pas redirigé, cliquez ici pour continuer.

Cela n’empêche cependant pas de terminer l’isntallation.

Le site publique s’affiche, mais il y a quand même un -

Problème

Je ne peux pas m’identifier et donc pas acceder à l’espace interne. (ni pour le site maitre ni pour l’autre dans Firefox).

Firefox: Avec le login public je me retrouve avec une page "Vous êtes enregistré… par ici… " et quand je click sur le lien je retourne sur la page initiale sans être connecté et si je mets /ecrire/ je retourne toujours sur le même formulaire (j’ai vidé le chache du browser et éliminé les cookies)
.
Opera: J’arrive à me connecter dans l’interface du site maitre, mais le site secondaire me renvoie également au formulaire login

Détails d’installation:

Essai en local
SPIP 12947 installe dans le dossier spip2
Mutualisation 23017

site maitre:
monsite

site secondaire
monsite/premier_site

.htacces:

RewriteBase /spip2/
RewriteCond %{REQUEST_URI} !^/(config|dist|ecrire|IMG|prive|plugins|sites|squelettes|tests|tmp|lib|local|mutualisation)/(.)
RewriteRule ^[^/]+/(.
) /$1 [QSA,L] (j’ai essyé sans et avec rewriteBase - meme réultat)

mes_options.php

<?php $mutualisation = true; if ($mutualisation){ // mutualisation if (!defined("_ECRIRE_INC_VERSION")) return; // charger la librairie de mutualisation require _DIR_RACINE . 'mutualisation/mutualiser.php'; // tester si c'est une repertoire non SPIP if ( ( preg_match(',^/([\.a-zA-Z0-9_-]+)/,', $_SERVER['REQUEST_URI'], $r) // un repertoire est demande AND ($_SERVER['HTTP_HOST'] == 'monsite') // qui appartient au domaine mutualise AND !is_dir(_DIR_RACINE . $r[1]) // qui n'est pas un dossier existant ) ) { // si c'est un repertoire, le site prend le nom de celui-ci $site = $r[1]; } else { // sinon on prend le nom du domaine ou sous-domaine+domaine $site = $_SERVER['HTTP_HOST']; } // je considere un SPIP = une base de donnee distincte // le prefixe des tables peut donc etre toujours 'spip' # $GLOBALS['table_prefix'] = 'spip'; // parametres de base de donnee // avec creation user automatique // pour chaque site // tous du mysql // (mais on pourrait tester $site pour mettre certains sur d'autres serveurs de donnees) define ('_INSTALL_SERVER_DB', 'mysql'); define('_INSTALL_HOST_DB', ''); // adresse de la bdd define('_INSTALL_USER_DB_ROOT', ''); // utilisateur eyant des droits de creation de bdd define('_INSTALL_PASS_DB_ROOT', ''); // mot de passe de l'utilisateur # define('_INSTALL_TABLE_PREFIX', 'spip'); // idem a $GLOBALS['table_prefix'] # define('_INSTALL_NAME_DB', 'mu_'.prefixe_mutualisation($site)); // nom unique de la bdd creee demarrer_site($site, array( 'cookie_prefix' => true, // cookies differents pour chaque sites 'table_prefix' => true, // deja defini, pas besoin de le calculer 'creer_site' => true, // on force la creation du site s'il n'existe pas 'creer_base' => false, // on force la creation de la bdd 'creer_user_base' => false, // on force la creation d'un utilisateur pour cette bdd 'mail' => '', // un mail sera envoye ici lors d'une creation 'code' => 'moncode', // code qui sera demande pour autoriser une creation de site //'url_img_courtes' => true // ne fonctionne pas avec une mutualisation de repertoire ) ); } ?>

Une idée de ce qui cloche

Merci
Rainer