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.
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.
ho un caso particolare (sito prestashop) su cui non so se puoi aiutarmi: ho bisogno di effettuare il seguente redirect
redirect 301 /directory/ http://www.sito.com/it/directory
successivamente però mi serve che la cosa non si ripercuota su
/directory/pagina1.html
che viene redirezionata in questo modo
http://www.sito.com/it/directorypagina1.html
creando un 404…
l’esigenza nasce dal fatto che la struttura del nuovo sito non rispecchia quella del vecchio e quindi non esiste più un ” http://www.sito.com/it/directory/pagina1.html”
c’è modo di impostare il redirect solo sulla directory (che per inciso, mi portava ad una pagina) evitando quell’effetto a cascata?