Redirect 301 tramite htaccess in Apache Web Server
Capita di dover modificare la URL di una o più pagine web del nostro sito, ad esempio per renderle "parlanti" e rispondenti ai contenuti della pagina (ad esempio, da www.miosito.it/?pagina1 a www.miosito.it/ecommerce) o perchè il dominio stesso è cambiato (ad esempio, da .it a .com).
In questi casi si fa ricorso alla tecnica del Redirect 301 tramite una direttiva inserita nel file .htaccess localizzato nella root del sito.
Esistono vari tipo di redirect ma si privilegia questo in quanto il "valore" (juice) della pagina "vecchia" viene trasferito sulla pagina "nuova". Se non sei un esperto SEO questo significa che la pagina con la nuova url non perderà la sua posizione nelle SERP di Google!
Il redirect 301 è una richiesta di modifica permanente e serve, come detto, ad indicare ai motori di ricerca che una o più pagine, o addirittura un intero sito web, è stato spostato da un indirizzo (URL) ad un altro.
La richiesta di spostamento temporanea è invece denominata 302.
Aprite un editor, create un file con nome .htaccess e mettiamoci al lavoro: vedremo in rassegna alcuni esempio di come utilizzare il file htaccess per effettuare un redirect 301.
Il file .htaccess andrà salvato nella root del vostro sito web.
In molti esempi che vedremo, affinche l'istruzione contenuta in htaccess funzioni, è necessario che sul web server Apache sia presente del modulo "mod_rewrite". Se acquisti uno spazio web in un hosting condiviso è sicuramente già installato, se invece gestisci un server verifica che sia presente. Quando utilizziamo il modulo rewrite, l'istruzione contenuta nel file .htaccess presenta la riga "RewriteEngine on", ed indica che verrà usato il modulo rewrite.
Redirect 301 dell'intero sito
RewriteEngine on
RewriteBase /
RewriteRule (.*) http://www.nuovodominio.it/$1 [R=301,L]
Inserendo nel file .htaccess queste righe, tutte le richieste dell'intero sito web saranno reindirizzate verso il nuovo dominio.
Possiamo anche scriverlo in questo modo: tutto il traffico che NON arriva al nuovo dominio lo rendirizziamo sul nuovo dominio
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.nuovodominio\.it
RewriteRule (.*) http://www.nuovodominio.it/$1 [R=301,L]
Un ulteriore modo è questo, e non utilizza il rewrite
Redirect 301 / http://www.nuovodominio.it/
Redirect 301 di una singola URL sullo stesso dominio
Redirect 301 /pagina-1.html /ecommerce.html
In questo modo tutte le richieste alla pagina "pagina-1.html" verranno redirette sulla pagina "ecommerce.html" dello stesso dominio
Redirect 301 di una singola URL su un dominio differente
Redirect 301 /pagina-1.html http://www.nuovodominio.it/ecommerce.html
In questo modo tutte le richieste alla pagina "pagina-1.html" verranno redirette sulla pagina "ecommerce.html" del nuovo dominio
Redirect 301 da non www verso www
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.miosito\.it$
RewriteRule ^(.*)$ http://www.miosito.it/$1 [R=301,L]
Tutte le richieste ricevute senza il www (si utilizza il punto esclamativo per negare una condizione) verranno reindirizzate al www.miosito.it indicando ai motori di ricerca che questo è il dominio principale (o canonico).
Redirect 301 da www verso non www
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !^miosito\.it$ [NC]
RewriteRule ^(.*)$ http://miosito.it/$1 [R=301,L]
Tutte le richieste ricevute saranno reindirizzate al dominio senza il www, e cioè miosito.it, indicando ai motori di ricerca che questo è il dominio principale (o canonico).
Redirect 301 da http verso non https
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.miosito.it/$1 [R=301,L]
Redirect 301 da https verso non http
RewriteEngine on
RewriteCond %{HTTP_HOST} ^miosito.it [NC]
RewriteRule ^(.*)$ http://www.miosito.it/$1 [R=301,L]
Redirect 301 per files con una certa estensione
Se ad esempio vogliamo redirigere tutto il traffico indirizzato a files con estensione .php a files con estensione .html, usiamo questo codice
RewriteEngine On
RewriteCond %{REQUEST_URI} .php$
RewriteRule ^(.*).php$ /$1.html [R=301,L]
Oppure potremmo scriverlo così, specificando il nuovo dominio
RewriteEngine On
RewriteCond %{REQUEST_URI} .php$
RewriteRule ^(.*).php$ http://www.miosito.it/$1.html [R=301,L]
Un metodo alternativo è questo
RedirectMatch 301 (.*)\.php$ http://www.miosito.it$1.html
Redirect 301 da un vecchio dominio a un nuovo dominio comprensivo di query string
Se la vecchia url presenta, appesi, dei parametri, ad esempio www.miosito.it/?par1=1234&par2=5678 (si chiama query string) e vogliamo spostare il traffico su un nuovo dominio portando assieme la query string, usiamo questo codice
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*) http://www.nuovodominio.it%{REQUEST_URI} [R=301,NC]
Con questo codice andiamo ad elimnare la pagina index.php restituendo una url senza index.php
Redirect 301 per eliminare index.php dall’URL
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)index\.php$ /$1 [R=301,NC]
Con questo codice andiamo ad elimnare la pagina index.php restituendo una url senza index.php
Redirect 301 realizzato in PHP
Lo stesso effetto del redirect ottenuto tramite il file .htaccess si può ottenere in PHP inserendo nella pagina "vecchia" semplicemente questo codice, con l'indicazione della url della "nuova" pagina
<?php
Header("HTTP/1.1 301 Moved Permanently");
Header("Location: http://www.newurl.com");
?>