Redirect con Apache: istruzioni di redirect per CentOS e Ubuntu

I redirect di Apache sono utili per una varietà di situazioni. Tra l’altro, potete usare i pratici redirect per dirigere i visitatori dalla versione HTTP a quella HTTPS del vostro sito web, reindirizzare il traffico da un URL www a uno non-www o anche cambiare i nomi di siti web e directory. Vi aiutiamo a capire e configurare i redirect di Apache su CentOS e Ubuntu.

Server dedicati
Performance e innovazione
  • Hardware dedicato al 100%
  • Fatturazione al minuto
  • Potenziato dai processori Intel® Xeon® e AMD

Redirect 301 o 302: qual è la differenza?

Quando si guardano i redirect, è importante distinguere tra redirect 301 e 302. Il primo codice di stato (301) indica una deviazione permanente, mentre il secondo (302) indica una deviazione temporanea.

Un redirect 301 è molto più auspicabile da un punto di vista SEO. Se un crawler SEO incontra un redirect di questo tipo, capisce che è un redirect permanente. Per questo motivo, non solo annota il nuovo URL, ma avvia anche il processo di trasferimento di qualsiasi valore di Page Rank dal vecchio URL a quello nuovo. Il ranking SEO già raggiunto viene di conseguenza preservato.

Se invece un crawler rileva un redirect 302, esso prende nota del nuovo indirizzo e va avanti. A seconda del crawler, può segnare l’URL per una visita ripetuta in futuro. Questo accade perché un redirect 302 dovrebbe indicare che il redirect è solo temporaneo e l’URL “reale” tornerà presto online.

Consiglio

Quando si crea un redirect, specificare sempre che si tratta di un redirect 301. In molte situazioni, il redirect è di default 302 se il tipo di redirect non viene specificato.

Redirect 301 Apache: nozioni di base

Se avete solo bisogno di reindirizzare un singolo URL o un piccolo numero di URL, potete facilmente contrassegnarli individualmente nel file di configurazione Apache del vostro progetto.

Semplice redirect dell’URL

Per un singolo redirect 301, usate la direttiva redirect nel file di configurazione di Apache. La sintassi è la seguente:

Redirect 301 [vecchio URL] [nuovo URL]

Il nuovo URL può anche essere un URL esterno. In questo modo, agli utenti può essere comunicato, ad esempio, l’URL facile da ricordare example.com/store, invece di dover trasmettere il lungo e complicato URL di una pagina di negozio Amazon. Il prossimo esempio reindirizza il traffico da example.com/store a una pagina del negozio Amazon:

Redirect 301 example.com/store https://www.amazon.com/s?marketplaceID=...

La direttiva redirect di Apache deve essere sempre inclusa nel blocco di comando VirtualHost nel file di configurazione principale del server web. Per impostazione predefinita, il file può essere trovato nelle seguenti posizioni:

  • CentOS: /etc/httpd/conf.d/example.com.conf
  • Ubuntu: /etc/apache2/sites-available/example.com.conf
N.B.

La posizione e il nome del file di configurazione di Apache possono variare, a seconda di come voi o il vostro amministratore del server avete impostato l’hosting.

Modificate questo file con un editor a vostra scelta, per esempio l’editor a riga di comando nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Scorrete il file fino a trovare il blocco di comando VirtualHost, che assomiglia a questo:

<virtualhost *:80></virtualhost>
ServerName example.com
	<directory " var www example.com html"></directory>
	AllowOverride All

Ora aggiungete la direttiva di inoltro di Apache al blocco di comando VirtualHost. Quando lo fate, assicuratevi di mettere la policy al di fuori dei blocchi di comando della directory:

<virtualhost *:80></virtualhost>
ServerName example.com
Redirect 301 /blog https://blog.example.com
	<directory " var www example.com html"></directory>
	AllowOverride All

Salvate e chiudete il file, poi riavviate Apache affinché le modifiche abbiano effetto:

CentOS:

sudo systemctl restart httpd

Ubuntu:

sudo service apache2 restart

Apache: inoltro di una directory

Potete anche reindirizzare una sottodirectory sulla vostra pagina corrente nello stesso modo. Per esempio, diciamo che volete spostare il blog del vostro sito web da una sottodirectory ('http://example.com/blog') al vostro dominio canonico ('http://blog.example.com'). La politica di reindirizzamento di Apache si presenta così:

Redirect 301 /blog https://blog.example.com

Redirect da domini www a domini non-www

È comune trasferire la versione www di un URL alla versione non-www (o viceversa) tramite una riga “ServerAlias” nel file di configurazione di Apache. Anche se questo approccio funziona bene dal punto di vista dei visitatori, non è considerato la soluzione migliore dal punto di vista SEO. L’uso di “ServerAlias” invece di un redirect 301 comporta il rischio che il contenuto in questione possa essere contrassegnato come contenuto duplicato. In linea di principio, tuttavia, non c’è alcuna differenza tra la versione www e la versione non-www di un URL da un punto di vista SEO. È importante scegliere una variante.

Di seguito, reindirizziamo il traffico di www alla variante non-www. Per questo abbiamo anche bisogno del file di configurazione principale di Apache, che si apre di nuovo con un editor a vostra scelta, per esempio con l’editor a riga di comando nano.

CentOS:

sudo nano /etc/httpd/conf.d/example.com.conf

Ubuntu:

sudo nano /etc/apache2/sites-available/example.com.conf

Cercate la seguente riga nel blocco di comando (con il dominio individuale del vostro progetto):

ServerAlias www.example.com

Cancellate questa riga e scorrete fino alla fine del file. Aggiungete il seguente nuovo blocco di comando “VirtualHost”:

<virtualhost *:80></virtualhost>
	ServerName www.example.com
	Redirect 301 / https://example.com/

Salvate e chiudete il documento. Poi riavviate Apache affinché le modifiche abbiano effetto.

Redirect complessi di Apache con mod_rewrite

Per redirect 301 più complessi, il modulo Apache mod_rewrite è la scelta migliore. Questo modulo è veloce, flessibile e potente e vi dà la possibilità di manipolare facilmente gli URL. Potete anche definire le regole appropriate in un file .htaccess.

Attivare mod_rewrite su CentOS

mod_rewrite è attivato di default su CentOS. Se trovate che non è stato attivato, potete sempre attivarlo nel file di configurazione di base del modulo. Per prima cosa aprite il file con l’editor nano:

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Aggiungete la seguente riga o attivatela se è stata commentata:

LoadModule rewrite_module modules/mod_rewrite.so

Nel passo successivo, attivate l’uso dei file .htaccess. Per fare questo, aprite il file di configurazione principale di Apache.

sudo nano /etc/httpd/conf.d/example.com.conf

Scorrete verso il basso fino al blocco di comando principale di VirtualHost, che come detto deve assomigliare a questo:

<virtualhost *:80></virtualhost>
ServerName example.com
	<directory " var www example.com html"></directory>
	AllowOverride None

Cambiate la voce per “AllowOverride” da “None” a “All”:

AllowOverride All

Se la voce della directory manca nel blocco di comando VirtualHost, aggiungetela manualmente:

<directory " var www example.com html"></directory>
	AllowOverride All
N.B.

Assicuratevi di usare il percorso corretto della directory principale del vostro sito web.

Salvate e uscite dal file. Riavviate Apache affinché le modifiche abbiano effetto:

sudo systemctl restart httpd

Attivare mod_rewrite su Ubuntu

Per abilitare mod_rewrite su un server Ubuntu, usate il seguente comando:

sudo a2enmod rewrite

Riavviate Apache affinché le modifiche abbiano effetto:

sudo service apache2 restart

Successivamente, permettete l’uso di file .htaccess. Per farlo, modificate il file di configurazione principale di Apache:

sudo nano /etc/apache2/sites-available/example.com.conf

Scorrete fino al blocco di comando principale di VirtualHost e trovate il blocco di comando directory (Directory), che deve assomigliare a questo:

<directory var www example.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted

Nella linea “AllowOverride” sostituite la voce predefinita “None” con “All”:

AllowOverride All

Se la voce della directory manca nel blocco di comando VirtualHost, aggiungetela manualmente:

<directory var www example.com html></directory>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted

Salvate e uscite dal file. Riavviate il server web affinché le modifiche abbiano effetto:

sudo service apache2 restart

Creare il file .htaccess per l’inoltro di Apache

Dopo aver configurato Apache per utilizzare mod_rewrite e permettere i file .htaccess, è il momento di andare nella directory dei documenti (directory principale) del vostro sito web e creare un file .htaccess.

N.B.

Non è necessario riavviare Apache dopo aver apportato modifiche a un file .htaccess.

Se non avete fatto alcuna modifica, passate direttamente alla directory principale del vostro server web Apache con la seguente voce:

cd /var/www/html

Ora create il file .htaccess nella directory e apritelo con il seguente comando:

sudo nano .htaccess

Specificate le vostre configurazioni individuali di mod_rewrite. Iniziate con un semplice test per assicurarvi che tutto funzioni correttamente aggiungendo le seguenti righe a questo file:

RewriteEngine on
RewriteRule ^hello.html$ goodbye.html

Questa regola reindirizza le richieste per hello.html alla pagina goodbye.html. Salvate e uscite dal file e poi create i due documenti HTML con i seguenti comandi:

sudo echo "Hello" >> hello.html
sudo echo "Goodbye" >> goodbye.html

Ora richiamate la pagina hello.html in un browser. Sarete reindirizzati a goodbye.html tramite redirect di Apache e vedrete il messaggio “Goodbye”.

Reindirizzare diversi domini allo stesso URL tramite redirect di Apache

Ci sono diverse ragioni per cui dovreste reindirizzare diversi domini allo stesso indirizzo:

  • Se il vostro sito principale è example.com, potete catturare in modo ottimale lo spazio dei nomi acquistando example.net e example.org.
  • Ha senso registrare anche i tipici errori di battitura del vostro nome di dominio come exampl.com o exmple.com e includerli nella vostra strategia. Questo vi protegge anche dal cosiddetto typosquatting.
  • Potete anche semplicemente avere delle varianti del vostro nome di dominio, come the-example.com o my-example.com, che, una volta richiamati, dovrebbero anche portare i visitatori al vostro progetto web.

Anche se potete reindirizzare questi nomi di dominio alla vostra pagina principale nel solito modo, è consigliabile da un punto di vista SEO impostare dei redirect 301 per raggiungere gli obiettivi prefissati.

Per reindirizzare diversi domini allo stesso dominio tramite redirect di Apache, attivate prima il modulo mod_rewrite come descritto nella sezione precedente e impostate un file .htaccess adatto. Poi aggiungete le seguenti righe al file .htaccess:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301]

Nell’esempio, il traffico viene reindirizzato da example.net a example.com. Ora basta adattare questa regola ai vostri nomi di dominio e ai risultati desiderati. Per esempio, per reindirizzare il traffico alla versione www dell’URL ('www.example.com'), dovete usare il seguente codice:

RewriteEngine on
RewriteCond %{HTTP_Host} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

Apache: come reindirizzare le pagine HTTP a HTTPS

Per la sicurezza dei vostri utenti e il vostro posizionamento nei motori di ricerca, è di fondamentale importanza che tutto il traffico sul vostro sito web via SSL/TLS sia protetto. Anche per questo caso, potete lavorare con un redirect Apache 301, che reindirizza automaticamente i visitatori alla versione HTTPS delle vostre pagine.

Anche in questo caso, prima impostate mod_rewrite e il file .htaccess e poi aggiungete le seguenti righe al file di configurazione:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com$1 [R=301,L]

Rinominare le pagine web e spostare le directory

Ci sono situazioni in cui è necessario rinominare una pagina esistente o una directory esistente. Ciò sospenderà tutti i link che si rivolgono a quella pagina, il che non solo diminuisce l’esperienza dell’utente, ma colpisce anche la vostra ottimizzazione SEO.

Usate le seguenti regole nel file .htaccess (dopo aver impostato i file mod_rewrite e .htaccess).

Rinominate il sito web:

RewriteEngine on
RewriteRule ^old-page.html$ /new-page.html [R=301]

Rinominate la directory:

RewriteEngine on
RewriteRule ^old-directory/ /new-directory/ [R=301]

Negli esempi precedenti, i nomi dei file e delle directory sono dati come un percorso relativo alla directory principale del sito web. Ci sono tre opzioni per i percorsi:

  • un percorso completo del file system come /var/www/html/new-page.html
  • un percorso web relativo alla directory principale come /new-page.html
  • un URL assoluto come 'http://example.com/new-page.html'

Le informazioni più importanti su mod_rewrite in sintesi

Il modulo mod_rewrite utilizza espressioni regolari per abbinare e sostituire gli URL. Per attivare mod_rewrite, la prima riga delle regole nel file .htaccess deve sempre essere così:

RewriteEngine on

Il cuore di mod_rewrite è composto dalle RewriteRules. Ogni RewriteRule consiste di tre parti:

RewriteRule [pattern] [substitution] [flags]

Il modello è creato con l’aiuto di espressioni regolari. Si possono fare le seguenti sostituzioni:

  • un percorso completo del file system
  • un percorso web relativo alla directory principale
  • un URL assoluto

I flag sono facoltativi. Alcuni dei più comuni sono:

  • L: indica che questa è l’ultima di una serie di regole
  • R=301: forza un reindirizzamento 301
  • NC: ignora le maiuscole/minuscole in modo che la regola non distingua tra maiuscole e minuscole

Per una lista completa dei flag disponibili, consultate il sito ufficiale di Apache.

In alcuni casi, una RewriteRule è introdotta da una RewriteCond. Questo definisce le condizioni sotto le quali la RewriteRule ha effetto. Anche un RewriteCond è composto da tre parti:

RewriteCond [test string] [condition] [flags]

La stringa di testo è tipicamente una variabile del server con il formato %{NOME DELLA VARIABILE}.

Ci sono tre tipi di condizioni (condition):

  • Espressioni regolari
  • Confronti di stringhe
  • Test di file/percorso

I flag sono anche facoltativi in questo caso. Sono disponibili tre flag per il RewriteCond:

  • NC: ignora le maiuscole/minuscole, quindi la condizione non è case-sensitive
  • OR: logico “o”
  • NV (“No Vary”): il nome dell’intestazione non è inserito nell’intestazione di risposta Vary

Qual è la differenza tra RewriteRule e redirect?

Sia RewriteRule che redirect 301 di Apache possono essere contrassegnati in un file .htaccess per reindirizzare il traffico del sito web. La differenza principale è che una RewriteRule è implementata dal modulo mod_rewrite e un redirect dal modulo mod_alias.

mod_rewrite mod_alias
usa RewriteRule e RewriteCond usa Redirect e RedirectMatch
molto versatile in quanto utilizza le espressioni regolari per abbinare e sostituire gli URL non configurabile più di tanto
può essere difficile da usare facile da usare
potrebbe non essere installato o attivato per impostazione predefinita già attivato per impostazione predefinita nella maggior parte delle installazioni di Apache
Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top