disign.it | Il modulo Apache mod_rewrite per riscrivere la URL | a digital sign for a best design!
A digital sign for a best design
Primo piano 4.533 visualizzazioni

Il modulo Apache mod_rewrite per riscrivere la URL

18/05/2011

Il mod_rewrite è un modulo per Apache. Il modulo associa "al volo" un URL virtuale (non esisente) ad uno reale, tramite delle regole definite nei file .htaccess.
Per prima cosa occorre verificare se sul nostro hosting il modulo è attivo, quindi per provare creiamo una pagina info.php in cui inseriamo l'istruzione

phpinfo();  

la carichiamo e richiamandola dal browser cerchiamo mod_rewrite nella sezione Loaded Modules. Se il modulo risulta caricato possimao proseguire.
Ma non basta, in alcuni hosting di basso livello potrebbe non essere abilitato l'uso del file .htaccess che invece è necessario.

Quindi prima di procedere testiamo il funzionamento di htaccess.

Con un editor di testo creiamo il file .htaccess in cui inseriamo le seguenti righe:
RewriteEngine On
RewriteRule ^test.html$ index.html [L]

salviamo e carichiamo sul server, e proviamo a richiamare dal browser la pagina test.html: in questo modo attraverso il mod_rewrite il browser cercherà di caricare il file fisico index.html (attenzione, il file index.html deve esistere sul nostro webserver, in caso contario sostituire nel file .htaccess il nome index.html con uno realmente esistente!).
Se l'uso di .htaccess è abilitato chiamando la pagina test.html che non esiste verremo reindirizzati su index.html.
Se entrambi i test hanno avuto esito positivo vediamo quali son le regole attraverso cui costruire un file .htaccess più articolato!

Dall'esempio semplice precedente ricaviamo che la prima linea attiva l'engine (e va sempre inserita!) mentre la seconda linea specifica una regola (RewriteRule) composta da:
    l'URL da riscrivere, tra ^ (inizio stringa) e $ (fine stringa)
    l'URL al quale verrà inviata realmente la richiesta
    parametri (tra parentesi quadre, separati da virgole)
        L  significa "ultimo", paragonabile al break, dice all'engine di fermarsi e di non controllare le altre regole

Per trasformare un URL con query string costruiremo una regola tipo questa:
RewriteRule ^([^/]+)/([^/]+)/([0-9]+)\.html$ index.php?id=$3&prod=$1&cat=$2

URL prima del rewrite (realmente esistente): www.domain.tld/index.php?id=$3&prod=$2&cat=$1
URL dopo il rewrite: www.domain.tld/monitor/samnsung/17.html

Abbiamo visto che la stringa da costruire va delimitata dai due caratteri ^ e $ al cui interno son inseriti questi 'elementi':
([^/]+)  attraverso la reg exp cattura la stringa -qualsiasi carattere tranne lo slash in qualsiasi quantità- inviata col parametro $1
       inseriamo una slash a simulare una sottodirectory
([^/]+)  attraverso la reg exp cattura la stringa -qualsiasi carattere tranne lo slash in qualsiasi quantità- inviata col parametro $2
/        inseriamo una slash a simulare una sottodirectory
([0-9]+) attraverso la reg exp cattura il valore intero -uno o più (+) caratteri numerici da 0 a 9 ([0-9]- inviato col parametro $3
\.html   indica ".html" (. è un metacarattere che vuol dire qualsiasi carattere, di conseguenza per passare . dobbiamo effettuare l'escape)

Bene, con queste indicazioni basilari siamo in grado di costruire tutti i redirect necessari a far scomparire dai nostri URl i file php e le relative query string, rendendo le nostre pagine più gradite ai motori di ricerca e aumentando il livello di sicurezza!
Attenzione, per ogni query string diversa per numero  e tipo di parametri dovremo costruire una regola ad hoc, ricordandoci di inserire [L] solo al termine dell'ultima riga.


Per chi vuol approfondire questo è il link  alla documentazione ufficiale.

← Alternative js crossbrowser di suddivisione del testo in colonne Google Chromebooks, netbook dedicato alla rete →

Invia una domanda o un commento sull'articolo

I campi obbligatori sono segnalati *

*

*



 

© 2009 - 2017 Impronte digitali di Luca Frassineti. Tutti i diritti riservati.