Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Rindirizzare gli URL con Apache

Come utilizzare gli alias e i redirect in Apache per rindirizzare automaticamente pagine Web
Come utilizzare gli alias e i redirect in Apache per rindirizzare automaticamente pagine Web
Link copiato negli appunti

In queste pagine vedremo come Apache ci permetta di "giocare" con gli URL intervenendo non appena una prefissata richiesta HTTP giunga al nostro server. Il modulo che rende possibile tutto ciò è mod_alias compilato di default. Per manipolazioni più complesse si può ricorrere ad un altro modulo, mod_rewrite, ma non sarà oggetto della trattazione. In pratica analizzeremo due aspetti: l'aliasing ed il redirect. Nel primo caso mapperemo una parte del file system su un'altra, nel secondo effettueremo un rindirizzamento dell'URL.

Prima di proseguire, a scanso di equivoci, un piccolo chiarimento: ogni direttiva di Apache, come saprete, ha un contesto d'azione a partire dal più generale sino al particolare. Schematizzando avremo:

  • server-config: indica una direttiva che può comparire in un qualunque punto del file http.conf, essa avrà un influenza globale sul comportamento del web server;

  • contenitore: ad esempio <Virtualhost></Virtualhost>, <Directory></Directory>, <Files></Files> e così via. In questo caso l'ambito d'azione viene ristretto al contenitore che racchiude la direttiva. Nel primo esempio sarà l'host virtuale, poi una directory e le sue sottodirectory, ed infine uno o più file.

  • per-directory: in questo caso si tratta delle direttive che possono essere incluse in file .htaccess (nome usato di default). Tale file viene letto "al volo" da Apache non appena riceve una richiesta per la directory in cui si trova. In poche parole è l'ancora di salvezza per chi non ha accesso ai file di configurazione del web server.

Di seguito parlando di contesto o livello della direttiva ci riferiremo a quanto sopra menzionato. Cominciamo con l'affrontare l'aliasing.

Alias ed AliasMatch

La sintassi della direttiva Alias è:

Alias percorso-URL percorso

Dove con "percorso-URL" si intende il percorso che compare nell'URL richiesto dal client, mentre "percorso" rappresenta un path reale nel file system. Essa permette di rendere disponibili documenti che non si trovano sotto la Document Root, ma in un percorso alternativo del nostro server. La direttiva può essere usata a livello di server-config o virtual host. Facciamo un esempio:

Alias /pubdocs /home/ermanno/documents

Questo significa che se arriva una richiesta per http://www.miosito.it/pubdocs/file.txt Apache la mapperà su /home/ermanno/documents/file.txt. Naturalmente senza che il client si renda conto di nulla. Attenzione a come realizziamo il tutto, non vogliamo certo rendere disponibili porzioni del nostro file system a tutto il web! Se nella definizione dell'alias usiamo la "/" finale cioè:

Alias /pubdocs/ /home/ermanno/documents/

la richiesta http://www.miosito.it/pubdocs non subirà l'alias ma solo la http://www.miosito.it/pubdocs/.

Le applicazioni possono essere innumerevoli vediamo ad esempio come "trasformare" la richiesta per un CSS in una chiamata ad un file PHP che generi dinamicamente il foglio di stile:

Alias /my.css /path_to_document_root/css/mycss.php

AliasMatch, simile alla precedente, risulta più potente permettendo l'uso delle espressioni regolari, la sintassi è:

AliasMatch regex percorso

In altre parole possiamo ricorrere alla versatilità delle espressioni regolari per esprimere l'URL di cui fare l'alias. Nell'esempio che segue la richiesta per un'immagine di tipo PNG contenuta nella directory images viene convertita in una chiamata ad uno script PHP.

AliasMatch /images/(.*).png /path_to_document_root/lib/manage_images.php

In questo modo nel soddisfare la richiesta del client possiamo compiere alcune elaborazioni come ad esempio recuperare l'immagine memorizzata in database o ridimensionarla al volo. Sfruttando variabili quali $_SERVER['REQUEST_URI'] o $_SERVER['PHP_SELF'] sarà semplice per manage_images.php ottenere il nome dell'immagine richiesta.

ScriptAlias ed ScriptAliasMatch

Sono direttive analoghe alle precedenti con un'unica importante differenza: il file richiesto nell'URL viene trattato come uno script CGI e gestito di conseguenza dal server attraverso mod_cgi. Il contesto di utilizzo risulta ancora server-config e virtual host. Di seguito la sintassi:

ScriptAlias percorso-URL percorso

ScriptAliasMatch regex percorso

Immaginiamo di volere che una richiesta del tipo http://www.miosito.it/script/script.pl ottenga come effetto l'esecuzione dello script /web/script/script.pl possiamo procedere così:

ScriptAlias /script /web/script

ScriptAliasMatch ci può evitare di scrivere più direttive ScriptAlias raggruppando tutto in un'unica espressione regolare. L'esempio seguente permette di mappare le richieste http://www.miosito.it/script/, http://www.miosito.it/Script/ in chiamate a CGI che si trovano nella directory /web/cgi/:

ScriptAliasMatch ^/[sS]cript/ /web/cgi/

Redirect e RedirectMatch

Tali direttive rindirizzano una richiesta per un URL verso un diverso URL. Vediamo la sintassi di Redirect:

Redirect [stato] vecchio-URL nuovo-URL

Il primo argomento, opzionale, permette di specificare il codice di stato HTTP restituito al client. Se non si specifica nulla viene restituito lo stato di rindirizzamento temporaneo 302. Con "vecchio-URL" si intende l'URL richiesto dal client e con "nuovo-URL" l'URL verso cui viene rindirizzato. Il codice di stato può essere espresso mediante parole chiave:

  • Permanent: rindirizzamento permanente codice 301.

  • Temp: rindirizzamento temporaneo, 302.

  • See other: corrisponde allo stato 303 la risorsa è stata sostituita.

  • Gone: 410, la risorsa richiesta è stata rimossa in questo caso il nuovo URL va omesso.

In alternativa possiamo fornire i codici in formato numerico: se sono compresi tra 300 e 399 il nuovo URL andrà indicata in caso contrario andrà omessa. Ci si potrebbe chiedere coma mai questa duttilità della direttiva, in effetti ancora oggi i client non sfruttano a pieno la molteplicità di risposte ricevute, ma, ad esempio, un server proxy che riceve una risposta di rindirizzamento permanente potrà memorizzare e fornire direttamente il nuovo URL.

Passiamo ad un esempio:

Redirect permanent /documents http://www.mionuovosito.com/documents

In questo modo una richiesta per http://www.miosito.it/documents/file.txt verrà rindirizzata su http://www.mionuovosito.com/documents/file.txt. Un utilizzo comune è quello di perdere l'indicizzazione del vecchio sito segnalando allo spider del motore di ricerca l'analoga risorsa permanentemente spostata sul nuovo sito:

Redirect 301 / http://www.mionuovosito.com/

Redirect ha un contesto d'applicazione molto ampio: server-config, host virtuale, directory, per-directory. Si potrà, quindi, sfruttarla anche all'interno di un file .htaccess.

RedirectMatch, come sarà ormai chiaro, estende le funzionalità della precedente permettendo il ricorso alle espressioni regolari:

Redirect [stato] regex nuovo-URL

Il contesto è analogo a quello della sorella minore: server-config, host virtuale, directory, per-directory. Il seguente esempio rindirizza le richieste dal vecchio URL al nuovo facendo corrispondere i vecchi file .htm ai nuovi file .html. Ad esempio http://www.miosito.it/prova.htm verrà rindirizzato su http://www.mionuovosito.com/prova.html.

RedirectMatch 301 (.*).htm$ http://wwww.mionuovosito.com$1.html

In chiusura accenno solo all'esistenza delle direttive RedirectTemp e RedirectPermanent esattamente equivalenti a Redirect temp e Redirect permanent.

Conclusioni

In queste pagine abbiamo visto come Apache ci permetta con semplicità di elaborare le richieste provenienti dai client e trasformarle in modo del tutto trasparente ed indolore. I campi d'applicazione sono i più vari e sicuramente rappresentano un importante strumento per il webmaster che costretto a modificare directory, spostare risorse, variare domini o altro voglia nascondere ai propri visitatori i retroscena di tali ristrutturazioni.

Ti consigliamo anche