Ricerca nel sito web

Come eseguire il reindirizzamento interno con mod_rewrite in Apache


In questo articolo e nel successivo spiegheremo come utilizzare mod_rewrite, per mappare determinate richieste HTTP ad altre pagine di un sito Web o a un URL esterno.

In altre parole, questo noto modulo di Apache ti permetterà di reindirizzare un URL verso un altro, che illustreremo attraverso esempi pratici.

Lettura consigliata: 5 suggerimenti per migliorare le prestazioni del tuo server Web Apache

NOTA: gli esempi seguenti presuppongono che tu abbia almeno una certa familiarità con le espressioni regolari compatibili con Perl (PCRE). Poiché questo argomento non rientra nell'ambito di questo articolo, fare riferimento alla documentazione di Perl 5 versione 24.0 per ulteriori dettagli su PCRE.

Prima di procedere, assicurati che il modulo di riscrittura sia caricato. Sebbene questo sia il comportamento predefinito in CentOS e distribuzioni simili, in Debian e derivati dovrai caricarlo manualmente come segue:

a2enmod rewrite

Configurazione di Apache per utilizzare il modulo mod_rewrite

Per semplicità, utilizziamo il sito predefinito in una casella CentOS 7 (IP 192.168.0.100) per spiegare come utilizzare mod_rewrite ( DocumentRoot: /var/www/html, file di configurazione: /etc/httpd/conf/httpd.conf).

Affinché Apache possa utilizzare questo modulo, aggiungi la seguente riga al file di configurazione:

RewriteEngine on

È importante notare che questa configurazione non verrà ereditata dagli host virtuali nella stessa casella.

Pertanto, dovrai aggiungere RewriteEngine per ciascun host virtuale in cui desideri utilizzare le regole di riscrittura.

Reindirizzamento interno: mappatura di un URL a un altro nello stesso host virtuale

Un reindirizzamento interno è l'esempio più semplice di mod_rewrite. Se desideri reindirizzare tutte le richieste per default.aspx a index.html, aggiungi la seguente riga (nota anche come regola di riscrittura) in RewriteEngine su:

RewriteRule "^/default\.aspx$" "/index.html"

e non dimenticare di riavviare Apache affinché le modifiche abbiano effetto.

Ciò potrebbe tornare utile se il tuo sito è stato originariamente progettato utilizzando ASP e successivamente modificato in semplice HTML5. I motori di ricerca avranno il file .aspx indicizzato ma quel file non esiste più.

In tal caso, dovrai trovare un modo per reindirizzare la richiesta in modo che i tuoi potenziali visitatori non si imbattano in una pagina di errore. Per testare, creiamo un semplice file HTML denominato index.html all'interno di /var/www/html con i seguenti contenuti:

<!DOCTYPE html>
<html>
  <head>
	<meta charset="utf-8">
	<title>New site</title>
  </head>
  <body>
	<h2>Default.aspx was here, but now it's index.html</h2>
  </body>
</html>

I segni caret e dollaro faranno sì che l'espressione regolare corrisponda a qualsiasi stringa che inizia con /default e termina con .aspx, rispettivamente.

Lettura consigliata: installa Mod_Pagespeed per velocizzare le prestazioni di Apache fino a 10 volte

Ora avvia il browser e puntalo su 192.168.0.100/default.aspx. Se le cose vanno come previsto, Apache dovrebbe invece servire index.html.
Tuttavia, l'utente finale vedrà comunque default.aspx nella barra degli indirizzi, rendendo la modifica totalmente trasparente:

Se desideri che l'URL nella barra degli indirizzi mostri che il server sta effettivamente servendo index.html invece di una pagina denominata default.aspx, aggiungi [R, L] alla fine della regola di riscrittura come segue:

RewriteRule "^/default\.aspx$" "/index.html" [R,L]

Qui [R,L] sono due flag opzionali che indicano che deve essere inviato un reindirizzamento HTTP completo al browser (R) e che non devono essere elaborate ulteriori regole:

Nota come la barra degli indirizzi ora mostra index.html, come previsto, invece di default.aspx come in precedenza.

Riepilogo

In questo articolo abbiamo spiegato come utilizzare mod_rewrite per eseguire il reindirizzamento interno. Resta sintonizzato per il prossimo post in cui impareremo come reindirizzare a una risorsa che è stata spostata su un server diverso e come visualizzare contenuti personalizzati in base al browser dell'utente. Fino ad allora, fare riferimento alla documentazione di Apache 2.4 per un elenco completo dei flag di riscrittura disponibili.

Come sempre, non esitate a utilizzare il modulo di commento qui sotto se avete domande o feedback su questo articolo. Restiamo in attesa della vostra risposta!