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 .= " DocumentRoot /var/www/indi/SITI/$CONF[sito] ServerName $out_domain ServerAlias $out_domain " . ($alias_www ? "www.$out_domain " : "") ."#ALIAS# "; if ($CONF["sito_ssl"] || $_GET["forza_genera_apache_conf"]) { $cartella_cert_test = "/etc/letsencrypt/renewal/$out_domain.conf"; $cartella_cert = "/etc/letsencrypt/live/$out_domain"; $exist = system("if [ -f " . $cartella_cert_test . " ]; then echo \"1\"; else echo \"0\"; fi"); if (!$exist) { $cartella_cert_test = "/etc/letsencrypt/renewal/www.$out_domain.conf"; $cartella_cert = "/etc/letsencrypt/live/www.$out_domain"; $exist = system("if [ -f " . $cartella_cert_test . " ]; then echo \"1\"; else echo \"0\"; fi"); if (!$exist) { $cartella_cert = null; } } if ($cartella_cert != null) { $out .= " DocumentRoot /var/www/indi/SITI/$CONF[sito] ServerName $out_domain ServerAlias $out_domain " . ($alias_www ? "www.$out_domain " : "") ." #ALIAS# SSLEngine on SSLProtocol All -SSLv2 -SSLv3 SSLCertificateKeyFile $cartella_cert/privkey.pem SSLCertificateFile $cartella_cert/cert.pem SSLCertificateChainFile $cartella_cert/chain.pem "; mail("m.ceccarelli@tnx.it", "mod_apache_autoconf.inc.php cartella cert per $out_domain = $cartella_cert", "", "From: cecca@tnx.it\n"); } else { mail("m.ceccarelli@tnx.it", "problema mod_apache_autoconf.inc.php cartella cert non esiste per $out_domain", "", "From: cecca@tnx.it\n"); } } $out .= " "; if($alias != "") { d_info($alias,"mod_apache_autoconf:alias","INDI"); indi_log("mod_apache_autoconf: genero apache.conf ALIAS ($alias)","INDI"); } $out = str_replace("#ALIAS#",$alias,$out); } if($redirect != "" and $redirect_to != "") { d_info($redirect_to,"mod_apache_autoconf:redirect","INDI"); $redirect_to = str_replace("http://http://","http://","http://".$redirect_to); //metto http in automatico indi_log("mod_apache_autoconf: genero apache.conf REDIRECT ($redirect -> $redirect_to)","INDI"); $out .= " ServerName $redirect ServerAlias $redirect" . ($alias_www ? " www.$redirect " : " ") . " Redirect permanent / $redirect_to "; } if($redirect_seo != "" and $redirect_seo_to != "") { d_info($redirect_seo_to,"mod_apache_autoconf:redirect_seo","INDI"); $redirect_seo_to = str_replace("http://http://","http://","http://".$redirect_seo_to); //metto http in automatico indi_log("mod_apache_autoconf: genero apache.conf REDIRECT_SEO ($redirect_seo -> $redirect_seo_to)","INDI"); $out .= " ServerName $redirect_seo ServerAlias $redirect_seo" . ($alias_www ? " www.$redirect_seo " : " ") . " RewriteEngine On RewriteRule ^(.*)$ $redirect_seo_to$1 [R=301,L] "; } } } if ($_GET["forza_genera_apache_conf"]) { echo "
" . htmlentities($out);
	}

	return $out;
}
	

?>