In questo articolo cercherò di spiegare come apache gestisce le URL. In particolare come elabora le richieste per restituire le pagine corrispondenti presenti nel filesystem.
Document root
Il comportamento predefinito del server Web, quanto riceve una richiesta, è quella di prendere la parte di URL che segue la sezione identificata da hostname e porta, e concatenarla alla DocumentRoot, solitamente specificata nel file di configurazione generale.
Per esempio nel caso in cui la DocumentRoot fosse /var/www/html, una URL del tipo http://www.sito.it/spesa/giocattoli.html verrebbe risolta nella posizione locale: /var/www/html/spesa/giocattoli.html
E’ utile ricordare come apache si serve dei virtual host, tramite i quali simula un ambiente multi-dominio; in questo caso la mappatura fra URL e filesystem dipende dalla specifica documentRoot del virtual host
File esterni alla DocumentRoot
E’ possibile riferire alcune richieste a pagine fisicamente esterne rispetto al percorso di default, apache offre diversi modi per effettuare questa operazione. Solitamente, in sistemi Unix, il riferimento da una locazione ad un altra viene effettuata tramite i link simbolici, che apache solitamente nega per ragioni di sicurezza, a meno che venga impostata la voce Options con i valori FollowSymlinks o SymLinksIfOwnerMatch
Alternativamente è possibile utilizzare la direttiva Alias. Vediamo subito un esempio molto eloquente:
Alias /documenti /var/documenti
In questo caso una richiesta alla pagina http://www.sito.it/documenti/dir/indice.html verrà risolta con la pagina locale /var/documenti/dir/indice.html
La direttiva ScirptAlias si comporta allo stesso modo della direttiva indicata appena sopra, solo che si indica il percorso di riferimento per gli script CGI
Redirezione
Fino ad ora abbiamo visto come alcune direttive di apache forniscono il contenuto di una locazione sul filesystem in base ad un a richiesta; a volte è necessario al contrario informare il client che la sua richiesta deve essere direzionata verso un’altra URL, e quindi istruire il browser per eseguire una nuova chiamate verso una locazione diversa. Questo è quello che in gergo viene chiamato Url Redirection ; tutto ciò può essere affrontato con la direttiva Redirect, eccone subito un esempio:
Redirect permanent /giocattoli_nuovi/ http://www.sito.it/giocattoli
In questo modo la richiesta alla pagina http://www.sito.it/giocattoli verrà ridirezionata verso http://www.sito.it/giocattoli_nuovi
E’ possibile eseguire delle ridirezioni più complicate sfruttando la potenza delle espressioni regolari e la direttiva RedirectMatch
Reverse Proxy
Apache è in grado di raccogliere documenti remoti e portarli in una posizione locale, per poi mostrarla a delle richieste client, rendendo tutto trasparente al browser richiedente
E’ necessario abilitare e configurare il modulo mod_proxy di apache al fine di ottenere un corretto funzionamento.
Ecco un esempio sfruttando la direttiva ProxyPass:
ProxyPass /google/ http://www.google.com
In questo caso digitando la URL http://www.sito.it/google/ verremo reindirizzati proprio sul sito www.google.com
Mod_rewrite
Quando sono richieste operazioni di sostituzione più potenti rispetto a quelle indicate fino a questo momento, le regole di sostituzione del modulo di rewrite sono molto utili. Tale modulo è in grado di determinare il tipo di ip richiedente o il browser, e gestire la richiesta di conseguenza; in più è possibile che tale modulo utilizzi un database esterno che lo supporti nella gestione delle richieste. Tale modulo è in grado di gestire tutti e tre i tipi di ridirezione:
- interna (verso una posizione locale)
- esterna (verso una posizione remota)
- proxy
File not Found
Inevitabilmente le URL che non corrispondono ad alcun file presente sul filesystem non possono essere servite. Questo può accadere per svariati motivi:
- un’errata digitazione della URL
- la URL si riferiva a dei vecchi documenti che ora sono stati spostati
In questo secondo caso è possibile utilizzare le tecniche di URL redirection per informare il browser che le risorse cercate sono state spostate altrove.
Nel primo caso dell’elenco è possibile utilizzare il modulo mod_spelling, che è in grado di analizzare la URL digitata ed in base ad un confronto con quelle effettivamente esistenti propone al client una scelta fra le risorse valide. Ovviamente tutto questo ha un costo in termini di prestazioni.
Se ovviamente ogni tentativo di scovare una risorsa locale fallisce viene visualizzata una pagina di errore con codice 404 (FILE NOT FOUND). L’aspetto grafico di questa pagina viene curato dalla direttiva ErrorDocument e può essere personalizza.









