/* -------------- APACHE -----------
in generale basta scrivere cosi e caricare online':
Note
- l' alias per www su DOMINIO_2_LIVELLO e' automatico
- Visitare almeno una volta on-line la home page dall' indirizzo di test http://indi.tnx.it/nomesito/
- Il controllo viene fatto ogni 15 minuti e poi apache si autoaggiorna
SINTASSI
=====================
2 LIVELLO (Forza sempre il dominio al secondo livello per evitare errori)
$CONF["apache:tnx.it"] = "DOMINIO_2_LIVELLO => SI";
ALIAS
$CONF["apache:tnx.it"] = "DOMINIO_2_LIVELLO => SI | ALIAS => aaaaaaa.it bbbbb.it www.xxx.it";
DOMINIO (prende tutto senza fare controlli)
$CONF["apache:xyz.tnx.it"] = "DOMINIO => SI";
REDIRECT
Redirect 301 standard solo per il dominio non per le sottopagine
$CONF["apache:tnx.it"] = "REDIRECT => www.altrodominio.it";
REDIRECT_SEO
Redirige con codice 301 anche tutte le sottopagine es:
www.tnx.it/pagina -> www.altrodominio.it/pagina
$CONF["apache:tnx.it"] = "REDIRECT_SEO => www.altrodominio.it";
SPIEGAZIONE TECNICA
===========================
Il sistema controlla ogni volta che si visita il sito, se il file di configurazione generale indi.inc.php e piu' recente dell' ultimo file di configurazione di apache per quel sito sito/indi/apache.conf, in caso affermativo viene parsata la configurazione es:
e viene generato un nuovo file apache.conf
Sul server ogni 15 minuti e' attivo un cron ( /root/script/cron/apache_autoconf) che verifica se ci sono nuovi siti o modifiche e genera un file unico per la configurazione di apache, che e' la somma di tutti i file generati da tutti i siti.
Poi viene controllato se ci sono modifiche dall' ultima versione e viene fatto il reload della conf di apache con
/etc/init.d/apache2 reload
//da fare togliere eventuale www sempre
*/
$_mod_apache_autoconf_init = 0; //se sto' aggiornando la configurazione
function mod_apache_autoconf_init() {
global $CONFIGURAZIONE,$CONF,$_mod_apache_autoconf_init, $indi_file_path;
//controllo se c'e' gia' il file di apache
d_info("INIZIO","mod_apache_autoconf","INDI");
if(is_online() and $DATI['pagina_def'] == $DATI['pagina']) {
if($CONF["mod_apache_autoconf_file"] != "AUTO") {
if(is_file($CONF["mod_apache_autoconf_file"])) {
include($CONF["mod_apache_autoconf_file"]);
} else {
indi_log("mod_apache_autoconf: ERRORE mod_apache_autoconf_file file ($CONF[mod_apache_autoconf_file]) non trovato !");
}
} else {
$CONF["mod_apache_autoconf_file"] = $indi_file_path;
}
//se c'e' controllo se e' da aggiornare
$_indi_apache_conf = "indi/apache.conf";
$_indi_conf_time = filemtime($CONF["mod_apache_autoconf_file"]);
$_indi_apache_time = @filemtime($_indi_apache_conf);
if((int)$_indi_apache_time < (int)$_indi_conf_time || $_GET["forza_genera_apache_conf"]) {
//genera la configurazione dall' indi apache:xxxxxxxx
$_mod_apache_autoconf_init = 1;
$apache_conf = apache_autoconf_genera($CONF);
if($apache_conf) {
if(@file_put_contents("indi/apache.conf",$apache_conf) === false) indi_log("mod_apache_autoconf: errore creazione/aggiornamento file apache 'indi/apache.conf'");
else indi_log("mod_apache_autoconf: AGGIORNO $_indi_apache_time < $_indi_conf_time");
} else {
if(is_file($_indi_apache_conf)) {
unlink($_indi_apache_conf);
indi_log("mod_apache_autoconf: CANCELLO FILE CONF ($_indi_apache_conf)");
d_info($out_domain,"mod_apache_autoconf: CANCELLO FILE CONF ($_indi_apache_conf)","INDI");
} else {
//indi_log("mod_apache_autoconf: nessun file generato");
}
}
} else {
//indi_log("mod_apache_autoconf: NON AGGIORNO apache.conf ($_indi_apache_time < $_indi_conf_time)");
d_info("NON AGGIORNO apache.conf ($_indi_apache_time < $_indi_conf_time)","mod_apache_autoconf","INDI");
}
}
d_info("FINE","mod_apache_autoconf","INDI");
}
function apache_autoconf_genera($CONF) {
//???da migliorare posso ciclare una volta sola
foreach($CONF as $k => $v) {
$kk = trim(substr($k,0,strpos($k,":")));
if($kk == "apache") {
$k_vera = Substr($k,strlen($kk)+1);
$k_vera = indi_tpl($k_vera,$CONF,1);
$v = indi_tpl($v,$CONF,1);
//sono sempre nel secondo livello
$tmp = indi_set($v);
//ciclo le sotto configurazioni
$out_domain = "";
$alias = "";
$redirect = "";
$alias_www = true;
foreach($tmp as $tmp_k => $tmp_v) {
if($tmp_k === "DOMINIO_2_LIVELLO") {
$out_domain = "";
$_indi_apache_domain = explode(".",$k_vera);
$_indi_apache_domain_2 = $_indi_apache_domain[count($_indi_apache_domain)-2];
$_indi_apache_domain_1 = $_indi_apache_domain[count($_indi_apache_domain)-1];
if($_indi_apache_domain_1 and $_indi_apache_domain_2) $out_domain = trim($_indi_apache_domain_2.".".$_indi_apache_domain_1);
} else if($tmp_k === "DOMINIO") {
$out_domain = trim($k_vera);
} else if($tmp_k === "ALIAS") {
$alias = trim($tmp_v);
} else if ($tmp_k === "ALIAS_WWW") {
if (trim($tmp_v) == "NO") $alias_www = false;
} else if($tmp_k === "REDIRECT") {
$redirect = trim($k_vera);
$redirect_to = trim($tmp_v);
} else if($tmp_k === "REDIRECT_SEO") {
$redirect_seo = trim($k_vera);
$redirect_seo_to = trim($tmp_v);
}
}
//per ogni dominio
//se ho il dominio
if($out_domain != "" and $CONF[sito] != "") {
d_info($out_domain,"mod_apache_autoconf:dominio","INDI");
indi_log("mod_apache_autoconf: genero apache.conf DOMINIO ($out_domain)","INDI");
$out .= "
" . htmlentities($out); } return $out; } ?>