Rewrite è una direttiva che permette di eseguire l'URL redirect come le direttive Alias e Redirect ma secondo criteri differenti e sofisticati come il nome utente autenticato, il tipo di browser o l'IP remoto.
Questa flessibilità si paga in termini di prestazioni in quanto il modulo mod_rewrite richiede molte risorse (di default è disabilitato).
Per abilitare la direttiva Rewrite occorre aggiungere la seguente riga nel file di configurazione httpd.conf oppure nel file .htaccess se è permesso l'Override:
RewriteEngine on
La direttiva per identificare le richieste da trasformare è RewriteRule, la sintassi è identica alla direttiva AliasMatch con in più la possibiltà di specificare, tramite alcuni flag (specificate alla fine della riga fra parentesi quadre), un controllo sull'esecuzione delle regole di rewrite.
La sintassi di base è:
RewriteRule url_match new_url [flags]
Esempio:
RewriteRule /images/(.*)\.gif$ /usr/local/apache/images/$1.gif
E' possibile elencare più regole di seguito:
RewriteRule /images/(.*)\.gif$ /usr/local/apache/images/$1.gif
RewriteRule /icons/(.*) /usr/local/apache/icons/$1
A differenza delle altre direttive di redirezionamento, le regole di rewriting non vengono ereditate in configurazione standard, per abilitare questa opzione occorre abilitarla a livello di configurazione inserendo nel file httpd.conf la seguente riga:
RewriteOptions inherit
Di seguito sono riportati i flag più comuni (è possibile utilizzare più flag separandoli tramite una virgola ","):
- redirect|R [=code] (force redirect) - Opzione che permette di specificare il codice di ritorno e la natura del redirect (permanente,temporaneo etc..)
- forbidden|F - Forza il forbidden (403) dell'url, quindi evita l'accesso a quella risorsa.
- last|L (last rule) - Identifica l'ultima rule che deve essere processata.
- next|N (next round) - Stoppa e restarta il processo di Rewriting.
- nocase|NC (no case) - Disailita il case sensitive delle regular expression.
- skip|S=num (skip next rule(s)) - Esegue un skip di n rules.
Esempio:
RewriteRule ^/old/(.*) /new/$1 [R=permanent,L]
n-righe tutte (quasi) uguali
x evitare di appensantire il file .htaccess, come fare x "dichiarare la variabile" se variabile non è? (Scusate la prosa infelice) in pratica ho questa riga:
RewriteRule ^test_prova2003/1.html test1_prova2003.php [L]
quindi il contenuto di ciò che diventerà (.*) non sta nella variabile... come impedire di avere n righe tutte uguali se non x il numero?
Grazie