Rindirizzare gli URL con Apache

7 giugno 2006

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.

Se vuoi aggiornamenti su Rindirizzare gli URL con Apache inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Rindirizzare gli URL con Apache

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy