Riscrittura e reindirizzamento degli URL con .htaccess

Riscrittura e reindirizzamento degli URL con .htaccess

Comprendere il funzionamento della riscrittura degli URL nel file .htaccess è un requisito fondamentale per comprendere come gestire al meglio gli URL dei siti dinamici. Wordpress, ad esempio, gestisce i suoi URL permanenti tramite tale file e il modulo per la riscrittura degli URL di Apache. Solitamente non abbiamo bisogno di approfondire l'argomento, poichè Wordpress gestisce tutto il processo in maniera visuale e automatica nelle sue opzioni di configurazione. Tuttavia, a volte è necessario aggiungere delle regole specifiche al file .htaccess per ottenere l'effetto finale voluto. Vediamo alcuni dettagli di questo argomento.

Abilitare il reindirizzamento degli URL

Se ci avete fatto caso, Wordpress scrive il suo file .htaccess iniziando con la seguente regola:

RewriteEngine on

Questa regola si rende necessaria perchè alcuni server non abilitano la riscrittura degli URL in modo predefinito, quindi dobbiamo farlo manualmente.

Reindirizzamenti di base

Possiamo reindirizzare i nostri visitatori ad un nuovo URL di un documento usando la seguente sintassi:

RewriteEngine on
RewriteRule ^about\.html$ me.html

Questa regola (RewriteRule) reindirizza l'utente dal documento about.html al documento me.html in modo instantaneo. Possiamo forzare una nuova richiesta HTTP nel browser semplicemente usando il flag [R] alla fine della regola:

RewriteEngine on
RewriteRule ^about\.html$ me.html [R]

La struttura di questa regola è la seguente:

  • il primo parametro è un'espressione regolare che serve a selezionare l'URL da riscrivere:
    ^about\.html$
    
  • il secondo parametro è la forma finale dell'URL una volta riscritto:
    me.html
    
  • il terzo parametro (opzionale) serve a dare ulteriori indicazioni sull'azione di riscrittura:
    [R]
    

Dato che il primo parametro è un'espressione regolare, caratteri come ^, $ e . hanno un significato particolare. Per chi è già pratico di espressioni regolari, il primo carattere seleziona l'inizio dell'URL, il secondo la sua fine e il terzo riceve un carattere di escape (\) perchè il suo significato originale è "seleziona tutti i caratteri".

Ora che sappiamo che la riscrittura degli URL è soprattutto basata su espressioni regolari, possiamo passare ad analizzare dei reindirizzamenti più avanzati.

Reindirizzamenti avanzati

Supponiamo di avere questa struttura di URL:

http://sito.it/prodotti/1

Vogliamo riscrivere questo URL come:

http://sito.it/prodotti.php?id=1

Ecco come possiamo fare:

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

Le espressioni regolari generano dei riferimenti che vengono elencati progressivamente con $1, $2 e così via. Quindi in questo caso l'espressione regolare che seleziona un numero generico di cifre viene memorizzata in $1 e quindi id=$1 verrà riscritto come id=1, id=2 e così via.

([0-9])+ significa: "seleziona solo delle cifre" o più precisamente una o più cifre (+). Quindi l'intera espressione regolare significa: "seleziona un URL che inizia con prodotti e termina con una o più cifre

e, aggiungiamo noi, riscrivilo come l'URL che troviamo alla destra dell'espressione regolare.

E se volessimo fare l'opposto? Ecco come fare:

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

Questa regola trasforma URL come http://sito.it/prodotti.php?id=1 in http://sito.it/prodotti/1.

Riferimenti

Torna su