Redirect 301 di molte pagine

Ultimamente ho dovuto affrontare questo problema per uno dei miei siti:

il sito ha oltre 450 pagine, tutte .php, e dovevo cambiare dominio. Era quindi necessario fare un redirect 301 di tutte le pagine verso le stesse pagine sul nuovo dominio. Farlo a mano sarebbe stato un suicidio!

Così ho creato uno script che, installato nella directory principale del sito, cercava tutti i files php, li apriva e li modificava inserendo il codice per il redirect alla stessa pagina sul nuovo dominio.

Spero possa esservi utile; non è sicuramente il top della programmazione ma per me ha funzionato!

Se avete suggerimenti su come migliorarlo scrivetemi pure..

Ci sono due variabili da impostare: nuovourl, che contiene l’URL del nuovo sito, senza lo slash finale (nel caso in cui dovete redirectare solo una sottocartella potete mettere l’url della sottocartella, sempre senza lo slash finale); ext, che contiene l’estensione dei file da modificare (nel caso avete delle estensioni tipo php4, o html che vengono eseguiti come files php).

Basta chiacchiere, ecco lo script

<?
# solo queste prime due variabili sono da modificare.
#se dovesse avere problemi con la scrittura dei file è possibile togliere il commento dalla riga 41 per effettuare un chmod prima dell’apertura del file.
$nuovourl = “http://www.nuovosito.com”; #url del nuovo sito o cartella destinazione, senza slash finale
$ext = “.php”; #estensione dei file da modificare

$file = $_SERVER['PATH_TRANSLATED'];
print(”<b>Path dello script:</b> $file<br>”);
$script = basename($file);
print(”<b>Nome file script:</b> $script<br>”);
$filelenght = strlen($script)+1;
$path = substr($file, 0, -$filelenght);
print(”<b>Path directory da modificare:</b> $path<br>”);

function walk_dir($path)
{
if ($dir = opendir($path)) {
while (false !== ($file = readdir($dir)))
{
if ($file[0]==”.”) continue;
if (is_dir($path.”/”.$file))
$retval = array_merge($retval,walk_dir($path.”/”.$file));
else if (is_file($path.”/”.$file))
$retval[]=$path.”/”.$file;
}
closedir($dir);
}
return $retval;
}
$array = walk_dir($path);
?><pre><? #print_r($array);
reset($array);
$n = 0;
while (list($key, $abspath) = each($array)) {
if($abspath != $file) {
print(”<b>Path file da modificare:</b> $abspath - “);
$relpath = str_replace($path, “”, $abspath);

if(strpos($relpath, $ext) > 0) {
#chmod($abspath, 0777) or die(”impossibile modificare i permessi”);
$handle2 = fopen($abspath, “w”) or die(”impossibile aprire il file in scrittura”);
$url = $nuovourl . $relpath;
fputs($handle2, “<?
Header( \”HTTP/1.1 301 Moved Permanently\” );
Header( \”Location: $url\” );
?>
“) or die(”impossibile scrivere sul file”);
fclose($handle2);
print(”<b>reindirizzato a </b>$url - OK<br>”);
$n++;
}

}
}
print(”<br><br>$n file modificati”);

Per far funzionare lo script è necessario che vi siano i permessi per scrivere nelle cartelle.

Lo script in automatico cerca in tutte le sottocartelle dove viene installato, se non dovete reindirizzare tutto l’unica cosa che mi viene in mente (apparte modificare lo script per le vostre esigenze) è quella di installarlo via via nelle sottocartelle che dovete reindirizzare così da lasciare fuori quelle che non vanno modificate. Oppure potere scaricare i files che non vanno modificati via ftp, far andare lo script e ri-uploadare i files che dovevano rimanere così.

Alla prossima

Lascia una Risposta