Htaccess per Riscrittura e Reindirizzamento url

Nell’articolo precedente abbiamo parlato del redirect 301. Oggi invece affrontiamo un altro argomento interessante se devi migrare un sito o anche solo reindirizzare contenuti e riscrivere url.

reindirizzamento url

Htaccess per Riscrittura e Reindirizzamento url


 

Quello htaccess è un semplice file di testo che però svolge un ruolo molto importante perché può consentirti di gestire comodamente vari tipi di reindirizzamenti e riscritture di url del tuo sito web dinamico. Talvolta è opportuno aggiungere regole specifiche al file .htaccess per raggiungere l’obiettivo dsiderato. Vediamo la cosa più nel dettaglio.

Cominciamo col dire che ad esempio, wordpress scrive il file .htaccess a partire dalla regola Rewrite angine on. Tale istruzione abilita la riscrittura delle url.

Alcuni reindirizzamenti di base

Per reindirizzare i visitatori verso un nuovo indirizzo url si utilizza la seguente sintassi:

RewriteEngine on

RewriteRule ^da-qui\.html$ a-qui.html

Tale regola reindirizza l’utente dal documento da-qui.html al documento a-qui.html. Usando il flag [R] alla fine della regola puoi forzare una nuova richiesta HTTP nel browser.

RewriteEngine on

RewriteRule ^da-qui\.html$ a-qui.html [R]

Osserviamone la struttura

il primo parametro è un’espressione regolare che serve a selezionare l’URL da riscrivere:

^da-qui\.html$

il secondo parametro è la forma finale dell’URL una volta riscritto:

a-qui.html

il terzo parametro (opzionale) serve a dare ulteriori indicazioni sull’azione di riscrittura:

[R]

Essendo il primo parametro un’espressione regolare, caratteri come ^, $ e . hanno un significato specifico. Se ti sono chiare le espressioni regolari, tieni conto che il primo carattere seleziona l’inizio dell’URL, il secondo la parte finale mentre il terzo riguarda un carattere di escape (\) dal momento che il suo significato di partenza è selezionare tutti i caratteri.

Sapendo che la riscrittura delle URL è principalmente gestita con espressioni regolari, prendiamo in esame reindirizzamenti specifici.

Reindirizzamenti avanzati attraverso il file htaccess

Supponiamo di avere questa struttura di URL:

http://progetto.com/servizi/1

Se ti interessa riscrivere in questo modo:

http://progetto.com/servizi.php?id=1

Puoi utilizzare questa sintassi:

RewriteRule ^servizi/([0-9])+/$ /servizi.php?id=$1

Le espressioni regolari producono riferimenti progressivi di tipo $1, $2 etc. Qui l’espressione regolare riguardante un numero, viene archiviata in $1 (in pratica id=$1) e verrà riscritta come id=1, id=2 e via dicendo.

([0-9])+ significa solo: “seleziona cifre” cioè una o più (+) cifre. L’espressione regolare richiede di selezionare un URL che inizia con servizi e finisce con una o più cifre.

Sintassi per reindirizzare una pagina web con Redirect 301 tramite htaccess

redirect 301 /contenuto1.html http://www.sito.com/contenuto2.html

Procedendo per punti:

  • Scrivere redirect 301;
  • Aggiungere la vecchia url senza http://www.sito.com;
  • Scrivere il percorso completo della url di destinazione.

Con questa sintassi di base del redirect 301 puoi spostare singoli contenuti o anche un certo numero di pagine tenendo conto che occorre compilare una riga per ogni reindirizzamento.

Reindirizzare un intero sito con redirect 301

Tramite htaccess puoi anche spostare un intero sito web da un dominio all’altro. Devi comunque gestire un redirect 301, ma sfruttando le espressioni regolari mediante RewriteRule.

Volendo spostare un sito web da vecchiosito.com a nuovosito.com puoi inserire questo codice nel file htaccess all’interno della root principale di vecchiosito.com:

Options +FollowSymLinks

RewriteEngine on

RewriteRule (.*) http://www.nuovosito.com/$1 [R=301,L]

In questo caso viene utilizzato il mod_rewrite per reindirizzare un sito intero. A questo scopo dev’essere presente la riga RewiteEngine on nel file htaccess.

One Response

  1. Lorenzo 04/11/2015

Rispondi all'articolo

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.