Parecchi webmaster hanno l’esigenza per diversi motivi di dover effettuare dei redirect, siano essi redirect 301 (Moved Permanently) o redirect 302 (Moved Temporarily), in questo articolo cercheremo di capire quale fà al caso nostro e come realizzarli tecnicamente. Un redirect si può effettuare in molteplici modi, sia lato client che lato server. Lato client la soluzione più semplice è utilizzare javascript, mentre lato server si può effettuare direttamente tramite istruzioni al webserver oppure all’interno di pagine dinamiche quali PHP, ASP, ASP.NET e così via. Illustreremo in questo articolo i redirect effettuati lato server con il webserver Apache e l’ausilio del file .htaccess.
La prima esigenza più comune che un webmaster deve affrontare è il corretto instradamento degli utenti e degli spider dei motori di ricerca, in questo ambito vengono difatto utilizzati i redirect.

Primo esempio: sito.it Vs www.sito.it
Quando registriamo un dominio di secondo livello possiamo di utilizzarlo così com’è (sito.it) oppure possiamo come convenzione utilizzare il sottodominio di terzo livello www. (www.sito.it). La cosa che parecchi webmaster vogliono evitare è la possibilità che alcuni utenti e spider utilizzino la prima soluzione e altri la seconda, quindi opta per il redirect permanente verso il sito con il www. Per implementare questa situazione dobbiamo inserire nel file .htaccess il seguente codice:

RewriteEngine on
rewritecond %{http_host} ^sito.it
rewriterule ^(.*)$ http://www.sito.it/$1 [r=301,L]

In questo modo diciamo al mod_Rewrite di Apache che qualsiasi richiesta al dominio sito.it e quindi pure sito.it/nomepagina1.htm ecc.. vengono rigirate tramite redirect 301 tutte su www.sito.it e quindi pure su www.sito.it/nomepagina1.htm

Secondo esempio: Sito in manutenzione o under costruction
Potreste avere l’esigenza di dirottare qualsiasi utente che chieda una qualsiasi pagina del sito su una pagina “spiacente manutenzione in corso”, per poi ripristinare il corretto uso del sito dopo i lavori di manutenzione. Essendo un redirect temporaneo useremo il 302 anzicchè il 301 usato nell’esempio precedente. Passiamo alle istruzioni:

RewriteEngine On
Rewritecond %{
http_host} ^www.sito.it
Rewritecond %{request_uri} !/manutenzione\.html$
Rewriterule .* /manutenzione.html [R=302,L]

Come prima impartiamo le istruzioni al modulo mod_rewrite di Apache in modo che qualsiasi richiesta al sito (www.sito.it) che arrivi venga dirottata sulla pagina manutenzione.html tranne però le richieste che arrivano direttamente sulla pagina manutenzione.html altrimenti si creerebbe un loop infinito di redirect.

Redirect 301, 302 con Apache e htaccess
Tag:                     
  • Salve,
    purtroppo sono incappato in un hosting abbastanza “pessimo” ed ho un piccolo problema:
    tutte le pagine senza “www” non vengono caricate.
    Allora ho fatto questo:
    Ho rediretto i DNS * e @ del mio sito sul mio ip statico dove sta in esecuzione xampp always on così da intercettare le richieste, e poi ho fatto una index.php che mi trasforma le richieste senza www in richieste con www tramite il codice:

    putroppo non funziona come dovrebbe (a volte va, altre no).
    A me servirebbe un “redirect wild card” da “http://sito.ext/*” a “http://www.sito.ext/*” per qualunque valore di * in PHP (file, sottocartelle, variabili), ed ho a disposizione tutto apache per farlo, ma non so come.
    Mi potete aiutare?
    Sarebbe una grande cosa se potesse essere “indipendente” dal dominio, cioè ogni richiesta del tipo sito1.ext, sito2.ext… si trasformi automaticamente in http://www.sito1…, anche se la cosa non è fondamentale.
    Grazie.

    Dimenticavo: ovviamente il sito NON si trova sul mio pc, devo solo “reindirizzare” la richiesta.

  • Ciao MTBVulture,
    se ho capito bene tu vuoi che qualsiasi pagina richiesta a sito.it esempio sito.it/chisiamo.php venga ridirezionata a http://www.sito.it/chisiamo.php.
    In questo caso tu ricadi proprio nel primo esempio dell’articolo, ovvero sito.it Vs http://www.sito.it. Quindi devi creare un file .htaccess e scrivere questo codice:

    RewriteEngine on
    rewritecond %{http_host} ^sito.it
    rewriterule ^(.*)$ http://www.sito.it/$1 [r=301,L]

    Ovviamente devi sostituire a sito.it il nome del tuo sito.
    Cosa significa questo codice? Significa che quando l’host inizia con sito.it viene reidirizzato a http://www.sito.it e gli viene poi aggiuta la parte finale della richiesta, che sono poi in realtà le eventuali sottocartelle e/o files.
    Facci sapere se con questo hai risolto o hai altri problemi, per usare questo dovresti vedere se xampp di default ti abilita anche il modrewrite.

  • grazie.
    in effetti così risolvo, ma vorrei sapere se è possibile “emulare” in qualche modo l’.htacess/modrewrite tramite l’utilizzo UNICAMENTE di php, magari tramite variabili $_SERVER o simili…
    CMQ per ora sto usando questo .htaccess e va alla grande!
    Una domanda a proposito: purtoppo in google tutte le pagine erano indicizzate SENZA www, ora sono obbligato ad usarlo: dite che con questo escamotage (301), cambiando tutte le sitemap (mettendo i www) ed indicando a google che quello con www è il dominio principale riesco a “trasferire” il pagerank sulla versione con www (senza: pagerank 3, con: pagerank 1… non mi va di perdere tutto questo lavoro da SEO.. :( )
    Grazie ancora

  • Bhe in PHP il redirect è possibile, l’unica controindicazione e che all’inizio di ogni file PHP dovresti includere un file che esegue il controllo sul dominio tramite le variabili $_SERVER tipo:
    $_SERVER[‘HTTP_HOST’] e/o $_SERVER[‘SCRIPT_FILENAME’]. Se il dominio richiesto è sito.it dovresti fare un redirect sul dominio con il www e fare attenzione a mantenere anche la stessa pagina. puoi usare questo codice:

    header(“location: http://www.sito.it/pagina.php“);

    Per quanto riguarda l’aspetto seo visto che nomini il Pagerank vedo che ti riferisci a Google. A tal proposito Google mette a disposizione uno strumento molto interessante che ti consiglio assolutamente di usare, il “Google Webmaster Tools”. Accedi a questo strumento e qui hai la possibilità di dire che “sito.it” è un mirror di “www.sito.it” in questo modo risolvi sia il problema del Pagerank sia il problema del contenuto duplicato. Perchè Google quando vede sito.it/descrizione.php e http://www.sito.it/descrizione.php pensa che siano 2 siti diversi con contenuti identici quindi uno lo tagga come “copia” e in un certo senso lo penalizza, ora se ti penalizza la pagina del sito mirror poco male, anzi è proproi la cosa giusta da fare, ma se ti penalizza quello del sito principale sono problemi!
    Facci sapere.
    Ciao.

  • ArMyBoT

    Ciao, ho un problema simile.
    In particolare devo dismettere un sito statico ben indicizzato per uno dinamico (attualmente in subfolder) da indicazzare.
    Aldilà di fare un redirect 301 secco su .htaccess dell’url “vecchio” verso il nuovo (soluzione funzionante ma ho avuto modo di vedere che dopo un po’ google rimuove le pagine che subiscono il redirect dal db) volevo provare quest soluzione sfruttando il rewrite.

    Essendo tutto sullo stesso dominio come pongo le condizioni?
    A esempio così è giusto?

    RewriteEngine on
    rewritecond %{http_host} ^sito.it\.miapaginastaticaindicizzata01\.html
    rewritecond %{http_host} ^sito.it\.miapaginastaticaindicizzata02\.html
    rewritecond %{http_host} ^sito.it\.miapaginastaticaindicizzata03\.html
    .
    .
    .
    rewriterule ^(.*)$ http://www.sito.it [r=301,L]

    (le richieste verso http://www.miosito.it/miapaginastaticaindicizzata01.html http://www.miosito.it/miapaginastaticaindicizzata02.html
    http://www.miosito.it/miapaginastaticaindicizzata03.html dovrebbero essere permanentemente dirottate verso l’home di http://www.miosito.it senza causare alterazione del pagerank delle pagine statiche interessate)

    E’ giusto secondo voi?

    Grazie,
    A.