Inserisci Infobox

Aliasing, URL redirection e rewriting

Redirection, aliasing e Rewrite.

Gestione redirezionamenti
Autore: al - Ultimo Aggiornamento: 2005-06-10 20:00:56 - Data di creazione: 2005-01-03 16:22:34
Tipo Infobox: SLIDE - Skill: 3- INTERMEDIATE

Esistono diversi modi per gestire a livello della configurazione di Apache la possibilità di gestire contenuti presenti su directory locali o server diversi da quelli che l'URI richiesto prevede.

Aliasing
L'aliasing permette di translare la richiesta di un file su una directory diversa da quella prevista (basata sulla DocumentRoot del server web). Esistono direttive che permettono aliasinjg statico o basato su regular expression, sia per file normali che per script da eseguire server side. Esempi:
Alias /icons/  /usr/local/apache/icons - I file relativi a tutte le richieste a http://www.sito.com/icons/* sono cercati nella directory indicata, anzichè in DocumentRoot/icons/
AliasMatch /pippo/(.*)\.jpg$  /images/icons/pippo/$1.jpg - Tutti i file .jpg nella directory pippo sono cercati nella directory indicata
ScriptAlias /cgi-bin/  /usr/local/apache/cgi-bin - Tutte le richieste a file in http://www.sito.com/cgi-bin/ sono cercate nella directory indicata e trattati come script da eseguire. Esiste anche ScriptAliasMatch.

Redirection
La redirection permette di dirottare su un diverso, anche di un server esterno, una richiesta del client. Viene gestita con la direttiva: Redirect [status] [prefix URL] [destinazione] .
Un esempio: Redirect permanent /docs http://www.new-domain.it/docs/archive/
Lo status "permanent" indica di considerare il nuovo url come definitivo. Anche in questo caso esiste la possibilità di fare redirezionamenti sulla base di regular expressions con RedirectMatch

Rewriting
Strumenti più sofisticati di aliasing o redirection possono essere fatti con le direttive di rewriting, tramite le quali si possono servire file diversi sulla base di criteri vari come l'IP del client, il tipo di browser, il tipo di file richiesto ecc.
Il rewriting, attivato con RewriteEngine on, prevede delle regole di matching degli URL identificate con RewriteRule sulla base anche di elementi vari definiti con RewriteCond.

Aliasing, redirecting e rewriting
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2003-02-12 15:15:28 - Data di creazione: 2003-02-12 15:15:28
Tipo Infobox: DESCRIPTION - Skill: 2- JUNIOR

Spesso le GET che arrivano al server web, si riferiscono a URL che non corrispondono del tutto con le risorse locali del server.

In questo caso è possibile che la richiesta:
- Venga interpretata, in modo del tutto trasparente al client, come un alias che permette di accedere alla risorsa reale sul server (aliasing)
- Sia redirezionata ad un altro URL, sia locale che remoto e venga inviato un messaggio al client di notifica sulla nuova posizione (redirecting)
- Venga manipolata e riscritta in vari modi da Apache in modo da essere gestita con flessibilità (rewriting).

Il modulo che gestisce sia il redirecting che l'aliasing è mod_alias, ma per la manipolazione avanzata di URL viene utilizzazato il modulo mod_rewrite che, a differenza del mod_alias, risulta piuttosto oneroso in quanto ad utilizzo delle risorse del sistema.

Alias e ScriptAlias
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2005-06-10 18:29:26 - Data di creazione: 2003-02-12 15:23:02
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

La direttiva Alias permette di translare l'URL in una differente locazione locale senza che il client se ne accorga.
Questa funzionalità è molto importante poiché permette di posizionare al di fuori della DocumentRoot, esposta via Web al mondo, file come CGI o script shell.

Basic Aliasing
La direttiva Alias prevede due parametri:
URL da aliasare - il path richiesto nell'URL inviata dal client
path reale - il path, secondo il file system locale, dove si trova la risorsa richiesta.
Nell'esempio che segue tutte le richieste a http://www.dominio.it/icons/ vengono cercate da Apache nella directory locale /usr/local/apache/icons che può stare al di fuori della DocumentRoot.
Alias /icons/  /usr/local/apache/icons

Ulteriori funzionalità sono offerte dalla direttiva AliasMatch che permette un maggior controllo sulla gestione dell'aliasing tramite Regular Expressions.
Nell'esempio che segue tutte le richieste client a file .jpg in /pippo/ vengono cercate da Apache nella directory /images/icons/pippo/
AliasMatch /pippo/(.*)\.jpg$  /images/icons/pippo/$1.jpg

Per eseguire l'alias di CGI scripts è bene utilizzare la direttiva ScriptAlias, le funzionalità e la sintassi sono identiche alla direttiva Alias.
Di fatto permette di eseguire i CGI scripts senza che la direttiva ExecCGI sia specificata.
Nell'esempio che segue tutte le richieste a http://www.dominio.it/cgi-bin/ vengono cercate nella directory /usr/local/bin/cgi-bin e i file a cui si accede vengono trattati come CGI da eseguire
ScriptAlias /cgi-bin/  /usr/local/apache/cgi-bin

Anche in questo caso è possibile definire delle Regular Expression tramite la direttiva ScriptAliasMatch:
ScriptAliasMatch /cgi-bin/(.*)\.cgi$  /usr/local/apache/cgi-bin/$1.cgi

Usare le direttiva Redirect
Autore: neo - Ultimo Aggiornamento: 2003-02-12 15:47:52 - Data di creazione: 2003-02-12 15:47:52
Tipo Infobox: DESCRIPTION - Skill: 3- INTERMEDIATE

L'alias risulta essere del tutto trasparente al client, ma se si vuole far conoscere al client un nuovo URL a cui puntare, occorre utilizzare la direttiva Redirect.
Anche il redirect viene gestito dal modulo mod_alias.

Il server processa la richiesta del client, se l'url richiesto prevede un redirect, il server invia un messaggio con lo status HTTP, che identifica la ragione del redirect

La redirezione è gestita dalla direttiva Redirect la quale richiede richiede tre opzioni:
status Lo status del redirect, cioè il messaggio HTTP che il server invia al client. Opzionale
prefix URL Il prefisso dell'URL per verificare il matching ed effettuare il redirect
Destinazione Il nuovo URL
La sintassi di base è quindi:
Redirect [staus] [prefix URL] [destinazione]
Un esempio può essere:
Redirect permanent /docs http://www.new-domain.it/docs/archive/
Questo esegue un redirect permanente per tutte le URL contenenti /docs in http://www.new-domain.it/docs/archive/

I redirect status possono essere:
permanent HTTP code: 301 Assegna in modo permanente il redirect e il client o il proxy cacha il nuovo URL e alle successive richieste viene effettuata la richiesta direttamente all'URL corretto
temp HTTP code: 302 Assegna in modo temporaneo il redirect ed il client continuerà ad effettuare le richieste al vecchio URL
gone HTTP code: 410 Di fatto non è un redirect poiché non prevede come parametri L'URL

La differenza essenziale tra permanent e temp risiede nel caching di un proxy server.
Il redirect permanent, fa in modo che sia il proxy ad eseguire il redirect nelle successive richieste, mentre quello temporaneo obbliga il proxy server ad eseguire sempre il check sull'URL originaria.
Se lo status è omesso Apache automaticamente intrepreterà il redirect come temporaneo.

Tramite la direttiva RedirectMatch è possibile eseguire un matching avanzato per eseguire il redirect, per esempio eseguire un redirect a seconda dell'estensione del file richiesto.
Segue un esempio utile per redirezionare solo le richieste di immagini ad un altro URL.
RedirectMatch (.*)\.(jpg|png)$ http://new-domain.it/images/$1.$2

Anche in questo caso è possibile specificare il tipo di redirect da eseguire (temp, permanent etc..)

Rewrite
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2003-02-12 15:55:39 - Data di creazione: 2003-02-12 15:55:39
Tipo Infobox: DESCRIPTION - Skill: 4- ADVANCED

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]

Uso avanzato di rewriting
Autore: neo - ( Revisione: al ) - Ultimo Aggiornamento: 2003-02-12 15:52:00 - Data di creazione: 2003-02-12 15:52:00
Tipo Infobox: DESCRIPTION - Skill: 5- SENIOR

La potenzialità di rewriting viene messa in evidenza quando si ha la possibilita di aggiungere, oltre all'URL matching, ulteriori condizioni per il redirect, come ad esempio la gestione di comportamenti diversi a seconda del browser utilizzato o dell'IP del client.  In questo caso la direttiva RewriteRule viene affiancata da un seconda direttiva, RewriteCond che specifica le condizioni su quando eseguire il redirect.

RewriteCond
Tramite questa direttiva si ha la possibilità di testare l'environment e gestire il redirect a seconda di determinate variabili d'ambiente. Le direttive RewriteCond devono essere specificate prima delle RewriteRule e possono essere unite fra di loro semplicemente elencandole una di seguito l'altra o tramite l'operatore logico [or].
Per esempio:
RewriteCond %{REMOTE_ADDR} ^192.168\.208\.1
RewriteCond %{REMOTE_USER}  pippo
RewriteRule ^/$ /internals/  [L]

Se l'indirizzo del client è 192.168.208.1 E l'utente remoto è pippo allora viene eseguita la regola di rewrite.

RewriteCond %{REMOTE_ADDR} ^192\.168\.208\.1 [or]
RewriteCond %{REMOTE_USER}  pippo
RewriteRule ^/$ /internals/  [L]

L'opzione [or] fa si che se una sola condizione è vera si esegue il redirect

URL-based conditions
E' possibile aggiungere una condizione come prefisso sempre tramite la direttiva RewriteRule (senza l'utilizzo di RewriteCond) seguita dai caratteri "- [c]":
RewriteRule ^/gallery/ - [c]
RewriteRule (.*)/([^/]*)\.gif$/  $1/home.gif

Tutte le url che iniziano con /gallery/ e richiedono un file .gif vengono redirezionate all'url nome_image/home.gif

Check e Opzioni particolari
E' possibile tramite il segno "!" negare il significato di una regular expression oppure invertire il significato di una condizione:
RewriteCond %{REMOTE_ADDR}  ^192\.168\.*
Esegue la RewriteRule se l'ip del client e' 192.168.*
RewriteCond %{REMOTE_ADDR} ! ^192\.168\.*
Esegue la RewriteRule se l'ip del client non e' 192.168.*

Ecco un elenco delle opzioni più comuni:
-f  Interpreta la test string come un path di un file e verifica che esista:
RewriteCond /home/%{REMOTE_USER}/index.html  -f
-d Interpreta la test string come un path di un directory e verifica che esista:
RewriteCond /home/%{REMOTE_USER}/  -d
-s Interpreta la test string come il path di un file e verifica che la sua dimensione non sia zero
-l Interpreta la test string come il path di un file e verifica che sia un symblic link
< "text" Verifica che la test string sia minore di "text"
> "text" Verifica che la test string sia maggiore di "text"
= "text" Verifica che la test string sia uguale a "text"

Tramite la direttiva RewriteCond è possibile  estrarre il valore di alcune variabili settate nell'environment ed associarle alla direttiva RewriteRule identificandole con %1,%2 e cosi via. Per esempio:
RewriteCond %{LA-U:REMOTE_USER}  ^(.*)$
RewriteRule ^/user-status(.*)$ /cgi/bin/userstatus.cgi$1?user=%1


Se si ha la necessità di specificare molte regole di rewriting o regole che devono essere applicate in casi specifici è conveniente utilizzare le rewrite map.
Le rewrite map sono inizializzabili tramite la direttiva RewriteMap con la seguente sintassi:
RewriteMap name  type:source
Per esempio:
RewriteCond ${LA-U:REMOTE_USER} ^(.*)$
RewriteMap servers  txt:/usr/local/apache/map-peruser/%1.map

Le rewriteMap possono essere dei semplici file di testo, dei DBM database, un programma esterno o una funzione interna.

Privacy Policy