Merci Eric pour l’astuce du ’url_img_courtes’ => true, du plugin mutualisation.
Je m’en suis servi pour modifier le fichier config/mes_options.php comme suit :
<?php
// MUTUALISATION
$rep = 'sites/';
$site = $_SERVER['HTTP_HOST'];
$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';
// exemple de logs a la racine pour tous les sites
define('_FILE_LOG_SUFFIX', '_' . $site . '.log');
define('_DIR_LOG', _DIR_RACINE . 'log/');
// prefixes des cookie et des tables :
$cookie_prefix = str_replace('.', '_', $site);
$table_prefix = 'spip';
// 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)
);
// Gestion des url d'images courtes (sites/nom/IMG/image.jpg -> IMG/image.jpg)
/*
* Ne fonctionne que pour de la mutualisation
* sur des noms de domaines.
*
* Une mutualisation de repertoire
* ne pourra fonctionner car les fichiers
* .htaccess de /IMG et /local n'ont pas
* connaissance du nom du repertoire.
*
* A mettre au debut du pipe pour compatibilite avec fastcache
*/
$GLOBALS['spip_pipeline']['affichage_final']
= '|mutualisation_url_img_courtes'
. $GLOBALS['spip_pipeline']['affichage_final'];
/* transformer les sites/truc/IMG/rtf/chose.rtf en /IMG/...*/
function mutualisation_url_img_courtes($flux) {
if (strpos($flux, _DIR_IMG)
OR strpos($flux, _DIR_VAR)) {
require_once dirname(__FILE__).'/mutualiser_gerer_img.php';
return mutualisation_traiter_url_img_courtes($flux);
}
else
return $flux;
}
?>
Ensuite j’ai copié dans le dossier config/ le fichier mutualiser_gerer_img.php du plugin mutualisation qui a pour contenu ceci :
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/*
* Creer les rewrite rules
*
* Dans /IMG, on arrive avec (http://naya/IMG/jpg/photo.jpg) :
* %{HTTP_HOST} = 'naya'
* %{SCRIPT_NAME} = '/chemin/http/jusqu/a/spip/spip.php'
* %{REQUEST_URI} = '/IMG/jpg/photo.jpg'
*
*/
// sur le repertoire $dir (sites/truc/local/)
function mutualisation_verifier_htaccess($url, $dir) {
// lire le .htaccess existant
lire_fichier($url._ACCESS_FILE_NAME, $htaccess);
$source = $htaccess;
// verifier notre bloc init
$bloc = '####
## ce fichier .htaccess est gere par le plugin *mutualisation*
##
## ne le modifiez pas : en cas de besoin editez ce plugin,
## puis effacez ce fichier, il sera recree
##
RewriteEngine On
RewriteBase /
';
if (strpos($htaccess, $bloc) === false)
$htaccess = $bloc;
$host = $_SERVER['HTTP_HOST'];
$racine = dirname($_SERVER['SCRIPT_NAME']); // profondeur_url();
if ($racine == '/') $racine='';
$site = basename(dirname($dir));
$bloc = "
#### 'http://$host$racine/' = 'sites/$site/'
RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^".preg_quote("$host$racine/",',')."
RewriteRule .* $racine/$dir\$0 [L]
";
if (strpos($htaccess, $bloc) === false)
$htaccess .= $bloc;
return ($htaccess === $source
OR ecrire_fichier($url._ACCESS_FILE_NAME, $htaccess)
);
}
/*
*
* Transformer les liens
* sites/nom_site/(IMG|local).* en (IMG|local).*
*
*/
function mutualisation_traiter_url_img_courtes($flux) {
// IMG
if (!defined('_URL_IMG'))
define('_URL_IMG', _DIR_RACINE . _NOM_PERMANENTS_ACCESSIBLES);
// local
if (!defined('_URL_VAR'))
define('_URL_VAR', _DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES);
if (mutualisation_verifier_htaccess(_URL_VAR, _DIR_VAR)
AND mutualisation_verifier_htaccess(_URL_IMG, _DIR_IMG)) {
return str_replace(
array(_DIR_VAR, _DIR_IMG),
array(_URL_VAR, _URL_IMG),
$flux);
} else
return $flux;
}
?>
Cette technique fonctionne, mais je ne sait pas si c’est correcte au niveau du code...
Quelqu’un peut-il me dire si cette modification php ne risque pas de poser problème ? Faille de sécurité ?
Merci