Apache è uno dei web server più usato su internet. Il server è distribuito sia come pacchetto AMP, ideale per piccoli progetti o chi deve sviluppare software sulla macchina locale, sia come server stand-alone, perfetto per soddisfare le esigenze di chi espone servizi su scala industriale.

Nelle scorse puntate abbiamo già introdotto gli aspetti principali del server, a partire dall'installazione e passando per le principali procedure di configurazione. In particolare abbiamo visto

Installazione di Apache su Windows

Installazione di Apache come servizio su Linux

Installazione di Apache su Linux con XAMPP

Files di configurazione di Apache

Il file httpd.conf di Apache

La direttiva Directory di Apache

Creazione di VirtualHost su Windows con Apache

Per il normale utilizzo del server, inteso come piattaforma di sviluppo o esposizione di un'applicazione web, gli argomenti elencati qui sopra dovrebbero metterci in condizione di lavorare e soddisfare le esigenze più comuni. Esistono però scenari d'uso avanzati, come ad esempio la necessità di gestire uno o più server Apache come macchine di front-end, collocate davanti agli application-server, seguendo uno schema di questo tipo. Ciò implica spesso un uso avanzato di Apache, che richiede competenze esperte, e non può essere trattato (in modo esaustivo) in questa sede. Possiamo però fare chiarezza sull'argomento e introdurre le caratteristiche principali del modulo mod_rewrite di Apache, che è il componente incaricato di implementare i requisiti richiesti ad una macchina di front-end. Lo scopo di questo articolo è introdurre l'argomento ai meno esperti, per mettere in grado chi deve lavorare con Apache di capire almeno cos'è il modulo rewrite, a cosa serve, e quali sono le sue caratteristiche principali.

Configurazione del modulo

Come tutti i moduli di Apache, il modulo rewrite va attivato nel file di configurazione di Apache. Ciò significa che nel file httpd.conf (o equivalente) dovrebbe trovarsi una riga come questa

LoadModule rewrite_module modules/mod_rewrite.so

Se la riga è preceduta dal simbolo # il modulo non è attivo: per attivarlo basta cancellare il simbolo # e riavviare il server. In alcuni casi, specialmente se lavoriamo su Linux compilando Apache a partire dai sorgenti, potrebbe essere necessario scaricare, compilare e installare il modulo “a mano”. Noi assumeremo che il modulo sia già disponibile, che dovrebbe essere la situazione più probabile.

Principi di funzionamento

Il modulo rewrite permette di specificare direttive di gestione delle richieste HTTP e HTTPS, in modo da poter bloccare, redirigere, inoltrare o semplicemente “aggiustare” gli URL delle richieste prima di procedere con l'erogazione delle risorse. Tali direttive possono essere inserite nei files di configurazione del server (configurazione per-server), come ad esempio il file httpd.conf o apache2.conf, oppure nei files di configurazione delle directories (configurazione per-directory), tipicamente il file .htaccess. La sintassi è la stessa, quello che cambia è quando viene applicata la direttiva: se lavoriamo lato per-server, la regola verrà applicata subito dopo aver letto la richiesta HTTP, prima di controllare i permessi di accesso alla risorsa. Se lavoriamo per-directory la regola si applicherà dopo aver autorizzato l'accesso alla risorsa, ovvero dopo aver consultato l'eventuale file .htaccess delle directory chiamata in causa. In altre parole possiamo decidere se lavorare a monte, “affacciati” verso il web, oppure a valle, subito prima dell'accesso al file system.

Un esempio di utilizzo del modulo rewrite potrebbe essere

RewriteEngine on

RewriteRule ^lang-([a-z]{2})\.htm$ /my_site/$1.php [NC]

La prima riga si occupa semplicemente di attivare, per il contesto corrente, il motore di riscrittura degli URL del modulo rewrite. La seconda riga contiene un esempio di regola vera e propria, che mostra perché occorrono competenze tecniche non banali per lavorare col mod_rewrite. La questione è meramente un problema di sintassi: non facciamoci spaventare dal groviglio di simboli scritti dopo la keyword RewriteRule. Quello che ci basta sapere, per iniziare a lavorare col modulo rewrite, è che la regola si occupa di riscrivere gli URL in entrata. Nel caso qui sopra la regola riguarda tutte le richieste che soddisfano il pattern

^lang-([a-z]{2})\.htm$

e lo riscrivono usando il nuovo URL

/my_site/$1.php

per il momento ignoriamo le parentesi quadre in fondo alla riga, che riguardano alcune meta-informazioni della regola. Se accettiamo di comprendere il modulo rewrite a piccoli passi, affrontando una questione alla volta, ci accorgeremo che alla fine non vi è nulla di ostico. La regola qui sopra, ad esempio, si occupa di ridirigere una richiesta del tipo

http://prova.com/lang-it.htm

verso l'URL

http://prova.com/my_site/it.php

Come detto sopra, la comprensione delle regole del modulo rewrite è principalmente una questione di sintassi. Per scrivere e leggere le regole occorre conoscere la sintassi delle espressioni regolari, che per quanto possano spaventare all'inizio, non sono altro che una sorta di gioco enigmistico. I caratteri “strani” che definiscono la regola sono gli operatori sintattici delle espressioni regolari: nelle prossime puntate vedremo come trattare alcune semplici espressioni regolari, sempre nel contesto del modulo rewrite. Basta un po' di pratica per trasformare le espressioni regolari in un linguaggio comprensibile, che potrebbe addirittura diventare un gioco da proporre, perché no, sotto l'ombrellone, al posto della solita rivista di enigmistica.