Version 5 — Décembre 2015 — 86.252.xx.xx
Cette page expose une des manières de mutualiser le noyau de spip dans le cas où spip n’est pas installé à la racine d’un domaine. Dans un cas classique et pour pouvoir créer des sites « à la volée », utiliser de préférence le plugin mutualisation. Je me permet de reprendre le code exposé par Matthieu Marcillaud et Committo, Ergo Sum. dans l’article officiel sur spip.net. Cet article est d’ailleurs une très bonne explication technique du principe de la mutualisation et il est indispensable de l’avoir lu pour comprendre ce qui suit... .
Premier cas
SPIP est appelé par http://example.org/spip/, les sites mutualisés par http://example.org/spip/premier_site/ ou http://example.org/spip/deuxieme_site/. Les 2 sites sont « rangés » dans le dossiers
Il faut alors mettre dans le .htaccess qui doit se trouver dans le dossier spip :
RewriteEngine On
RewriteBase /spip/
#Mutualisation
RewriteRule ^(premier_site|deuxieme_site)$ /spip/$1/ [R,L]
RewriteRule ^(premier_site|deuxieme_site)/ecrire$ /$1/ecrire/ [R,L]
RewriteRule ^(premier_site|deuxieme_site)/(.*) /spip/$2 [QSA,L]
Et dans config/mes_options.php :
<?php
$rep_install="spip/" ;
if ( preg_match(',^/'.$rep_install.'([\.a-zA-Z0-9_-]+)/,', $_SERVER['REQUEST_URI'], $r) AND !is_dir(_DIR_RACINE . $r[1])) {
$site = $r[1];
} else {
$site = $_SERVER['HTTP_HOST'];
}
$rep = 'sites/';
$path = _DIR_RACINE . $rep . $site . '/';
// ordre de recherche des chemins
define('_SPIP_PATH',
$path . ':' .
_DIR_RACINE .':' .
_DIR_RACINE .'squelettes-dist/:' .
_DIR_RACINE .'prive/:' .
_DIR_RESTREINT);
// ajout du dossier squelette
if (is_dir($path . 'squelettes'))
$GLOBALS['dossier_squelettes'] = $rep . $site . '/squelettes';
// exectution du fichier config/mes_option.php du site mutualise
if (is_readable($f = $path . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php'))
include($f);
// demarrage du site
spip_initialisation(
($path . _NOM_PERMANENTS_INACCESSIBLES),
($path . _NOM_PERMANENTS_ACCESSIBLES),
($path . _NOM_TEMPORAIRES_INACCESSIBLES),
($path . _NOM_TEMPORAIRES_ACCESSIBLES)
);
?>
Deuxième cas
Si on veut appeler SPIP par http://example.org/spip/, mais les sites mutualisés par http://example.org/premier_site/ ou http://example.org/deuxieme_site/ afin de cacher le noyau, il faut :
- déplacer les règles de mutualisation dans le fichier .htaccess se trouvant à la racine du domaine :
RewriteEngine on
RewriteBase /
#Mutualisation
RewriteRule ^(premier_site|deuxieme_site)$ /$1/ [R,L]
RewriteRule ^(premier_site|deuxieme_site)/ecrire$ /$1/ecrire/ [R,L]
RewriteRule ^(premier_site|deuxieme_site)/(.*) /spip/$2 [QSA,L]
- modifier légèrement mes_options.php
<?php
$rep_install="" ;
if ( preg_match(',^/'.$rep_install.'([\.a-zA-Z0-9_-]+)/,', $_SERVER['REQUEST_URI'], $r) AND !is_dir(_DIR_RACINE . $r[1])) {
$site = $r[1];
} else {
$site = $_SERVER['HTTP_HOST'];
}
// Pas de mutualisation pour le dossier spip qui est le site maitre
if ($site != "spip") {
$rep = 'sites/';
$path = _DIR_RACINE . $rep . $site . '/';
// ordre de recherche des chemins
define('_SPIP_PATH',
$path . ':' .
_DIR_RACINE .':' .
_DIR_RACINE .'squelettes-dist/:' .
_DIR_RACINE .'prive/:' .
_DIR_RESTREINT);
// ajout du dossier squelette
if (is_dir($path . 'squelettes'))
$GLOBALS['dossier_squelettes'] = $rep . $site . '/squelettes';
// exectution du fichier config/mes_option.php du site mutualise
if (is_readable($f = $path . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php'))
include($f);
// demarrage du site
spip_initialisation(
($path . _NOM_PERMANENTS_INACCESSIBLES),
($path . _NOM_PERMANENTS_ACCESSIBLES),
($path . _NOM_TEMPORAIRES_INACCESSIBLES),
($path . _NOM_TEMPORAIRES_ACCESSIBLES)
);
}
?>
Remarque
Dans les 2 cas précédents, la mutualisation avec un autre domaine fonctionne toute seule du moment qu’il pointe sur http://example.org/spip
Page de surveillance de la mutualisation
Pour pouvoir utiliser la page de surveillance de la mutualisation du plugin « mutualisation », installer ce plugin et rajouter en fin du fichier config/mes_options.php :
require _DIR_RACINE.'mutualisation/mutualiser.php';
$GLOBALS['mutualisation_dir'] = 'sites';
mutualisation_traiter_exec($site) ;
Cette page sera alors accessible via http://example.org/spip/ecrire/?exec=mutualisation