Riscrittura delle URL con htaccess Apache: consigli e esempi pratici.

E' passato un po' di tempo da quando ho scritto questo articolo.
Il mondo del digital è sempre in evoluzione e potresti trovare delle informazioni non più aggiornate.

Che cos'è?

.htaccess (hypertext access) è il nome che normalmente prende il file di configurazione delle directory di Apache. E' chiamato con il punto perchè generalmente i file di sistema nascosti nei sistemi operativi Unix sono denominati con il punto davanti (i cosiddetti dot files).

Che cosa mi permette di fare?

Le operazioni che generalmente sono eseguite con questo tipo di file sono:

  • configurazione delle autorizzazioni e autenticazioni, per poter personalizzare l'accesso delle directory e la sicurezza delle varie directory.
  • personalizzazione delle pagine di errore, mostrando messaggi (o pagine) customizzati a seconda degli errori che possono essere restituiti agli utenti.
  • redirezioni delle richieste HTTP verso altre URL, utile per eseguire URL rewriting.

Dove posso inserirlo?

I file .htaccess sono inseribili in qualsiasi directory del web server e le impostazioni di ciascun file vengono applicate alla directory dov'è posizionato e alle sue sottodirectory.

Posso cambiare il nome al file .htaccess?

Sì, è possibile cambiare il nome del file usando la direttiva AccessFileName nel file httpd.conf.

Per ridenominarlo .urlwriting basta inserire la seguente riga di codice:

AccessFileName .urlwriting

Come posso impostare la pagina 404 personalizzata?

Bisogna impostare all'interno del file .htaccess una riga di codice del tipo:

ErrorDocument 404 http://www.miosito.it/pagina-404.html

Come posso personalizzare l'accesso alle cartelle con .htaccess?

E' necessario impostare alcune direttive all'interno del file in grado di istruire il web server a gestire gli accessi in modo personalizzato.

Questo è un esempio di autenticazione regolata da .htaccess con l'ausilio dei file di configurazione utente (/www/passwords/password.file) e gruppi (/www/passwords/group.file).

AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins

Sottolineo che l'uso di .htaccess per personalizzare l'autenticazione tramite password appare forzata sia per questioni di sicurezza, sia per questioni di performance del server.

Come posso riscrivere le URL?

L'URL rewriting viene implementato con l'ausilio di 4 direttive:

  • RewriteEngine: è necessario settare a on questa direttiva per poter attivare la riscrittura;
  • RewriteRule: definisce le regole di riscrittura, la forma delle URL, lo status code HTTP da restituire e i molti altri parametri impostabili con i flag;
  • RewriteBase: definisce il percorso di base da applicare alle regole di riscrittura definite successivamente nel sorgente del file di configurazione.
  • RewriteCond: imposta le condizioni a cui per poter applicare la regola di riscrittura specificata successivamente nel codice sorgente;

Per gestire in modo corretto l'URL rewriting è bene avere dimestichezza con la sintassi delle espressioni regolari.

Alcuni esempi di URL rewriting frequenti.

#Redirige con status 301 tutte le URL di forma miosito.com/* in www.miosito.com/*
RewriteCond %{HTTP_HOST} ^miosito.com
RewriteRule ^(.*)$ http://www.miosito.com/$1 [R=301,L]


#Redirige con un 302 tutte le richieste da pagine HTML a pagine php
RewriteRule (.*).htm$ /$1.php [R=301,L]

#regola per eliminazione problema del trailing slash sulle URL a cartella
RewriteRule ^/directory$ directory/ [R=301,L]

#regola per eliminare la pagine con il solo parametro id all'interno
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^/web(.+)$ /web/? [R=301,L]

#regola per redirigere le richieste HTTP a seconda degli orari del giorno
RewriteCond %{TIME_HOUR}%{TIME_MIN} >0700
RewriteCond %{TIME_HOUR}%{TIME_MIN} <1900
RewriteRule ^file.html$ file-giorno.html
RewriteRule ^file.html$ file-notte.html

#regola per fornire contenuti diversi a seconda dello user agent
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/3.*
RewriteRule ^file.html$ file.mozilla3.html [L]

RewriteCond %{HTTP_USER_AGENT} ^Googlebot/.* [OR]
RewriteRule ^file.html$ file.meglio-non-fare-questo-cloaking.html [L]

#Regola per trasformare URL statiche in URL dinamiche con redirezione 302
RewriteRule ^notizia/(.*)_([0-9]+).html$ notizia/?id=$2 [L]

Alcuni link utili:

Altri post che potrebbero interessarti: