Redirect 301 con htaccess
  • Author:Grosseto Siti Web

Redirect 301 con htaccess di apache: come crearli

Cosa sono i redirect 301 con htaccess

I redirect 301 con htaccess servono per reindirizzare un url su un nuovo indirizzo. Vi sono diversi tipi ti redirect che, agli occhi dell’utente, fatto tutti la stessa cosa: il browser viene semplicemente dirottato su un’altra pagina. Un’importante differenza invece la fanno agli occhi degli spider: un redirect 301 è un reindirizzamento permanente mentre, un redirect 302 è reindirizzamente momentaneo che serve, ad esempio, in caso di aggiornamento del sito, per portare l’utente ad una pagina di cortesia.

Redirect 301 con htaccess

Redirect 301 con htaccess semplice

Per inserire un redirect 301 con htaccess in modo molto semplice da pagina1 a pagina 2 basta inserire una riga nel file .htaccess:

redirect 301 /page1.html http://www.urlsito.dominio/page2.html

La sintassi è banale: “redirect 301” seguito dalla vecchia pagina (con percorso relativo) seguito dalla pagana a cui si vuole reindirizzare (con percorso assoluto).
Ovviamente in caso si stia utilizzando wordpress con i permalink attivi la stringa di redirect sarà più simile a:

redirect 301 /page1/ http://www.urlsito.dominio/page2/

In entrambi i casi il funzionamento è il medesimo.

RedirectMatch 301 con htaccess

Vedremo adesso come reindirizzare un intero gruppo di url che “matchano” un’espressione regolare:

RedirectMatch 301 ^/cartella/(.*)$ http://www.urlsito.dominio/altracartella/cartella/$1

In questo esempio tutti gli indirizzi che iniziano con /cartella/ (^/cartella/) verranno reindirizzati su http://www.urlsito.dominio/altracartella/cartella/ (il valore $1 corrisponde a (.*) cioè qualsiasi carattere ripetuto qualsiasi numero di volte)

Evitare i loop

Il RedirectMatch è uno strumento potente ma è importante scrivere con cura le regole:

RedirectMatch 301 ^/cartella/dir1/(.*)$ http://www.urlsito.dominio/cartella/dir1/dir2/$1

Questo è un esempio di come non vanno scritte le regole per il RewriteMatch infatti, dalla pagina /cartella/dir1/pagina.html si verrà reindirizzati a /prima/dir1/dir2/pagina.html poi di nuovo a /prima/dir1/dir2/dir2/pagina.html e così via. Solitamente dopo un certo numero il browser mostra un messaggio che ci avverte che è stato superato il numero massimo di redirect e che probabilmente ci siamo imbattuti in un loop infinito.

Per ovviare al problema correggiamo la regola in questo modo:

RedirectMatch 301 ^/cartella/dir1/(?!dir2)(.*)$ http://www.urlsito.dominio/cartella/dir1/dir2/$1

(?!dir2) è un blocco che non ha dimensione, che può essere interpretato così: “controlla da qui in avanti se NON c’è dir2”. La regola “match” se dir2 non c’è, di conseguenza la regola è soddisfatta solo nel primo redirect.