In un precedente articolo è stata fornita la guida su come impostare un certificato SSL per il proprio sito. Oggi vedremo come sia possibile effettuare un corretto rendirizzamento del traffico su https senza dover intervenire direttamente sulla configurazione del server. Il tutto avviene tramite la creazione o la modifica del file .htaccess presente all'interno del sito.

Premessa: Il file .htaccess

Il file .htaccess è una configurazionespecifica per l'utilizzo di un determinato web server Apache. Quest'ultimo si presta ad innumerevoli utilizzi ed uno dei più comuni è proprio la gestione di un sito web.  Quando un file .htaccess è presente in una cartella qualsiasi del sito (compresa la root) la configurazione presente al suo interno va ad alterare il normale comportamento delle regole applicate sul server, con l'aggiunta o il rimpiazzo di determinate direttive, come ad esempio funzionalità di reindirizzamento, di sicurezza e in generale qualsiasi modulo di Apache che sia abilitato. Chiaramente spetta alla configurazione del server decidere cosa questo file può alterare. Ricordiamo infatti che l'.htaccess, essendo un file può essere modificato da chiunque abbia accesso ai file (CMS compresi), quindi potenzialmente il sito potrebbe essere compromesso se non si dispone di una conoscenza approfondita sull'argomento. Tuttavia è possibile permettere la sovrascrittura di un set predefinito di regole, in modo da limitare i possibili danni.

Reindirizzamento automatico ad https

Una funzionalità molto utile del file .htaccess è quella di configurare il reindirizzamento automatico dell'intero traffico su https. Quando viene configurato un certificato SSL infatti non si fa altro che aggiungere la possibilità di accedere al sito in https, lasciando comunque disponibile la versione http, per cui tutti gli utenti (compresi i motori di ricerca) potranno ancora accedere ed utilizzare la versione non sicura del sito. Essendo l'https un fattore di ranking molto importante è necessario quindi che i motori di ricerca capiscano che il sito ha una versione sicura e che la versione non sicura è stata reindirizzata.

Qualora si utilizzi un CMS tipo Wordpress o Drupal esistono dei plugin e dei moduli che si occupano di modificare il file .htaccess in modo da garantire questa funzionalità. Tuttavia vi sono dei casi in cui può essere necessario svolgere il lavoro manualmente ed è normalmente consigliabile avere sempre un occhio di riguardo per questo file e capire bene il suo funzionamento. 

Per prima cosa dunque è necessario creare o modificare il file .htaccess all'interno della root del sito ed aggiungere:

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

La sintassi è quella tipica di Apache2, con al suo interno una serie di Directive (direttive) che costituiscono la configurazione. Vediamo nel dettaglio:

  • La prima riga (IfModule) è una direttiva condizionale che controlla la presenza di un modulo specifico, in questo caso mod_rewrite, necessario per poter fare i rendirizzamenti. Se questo modulo è presente allora verranno applicate tutte le regole successive
  • RewriteEngine On, attiva il motore di reindirizzamento
  • RewriteBase /, indica che il reindirizzamento avverrà su tutto il traffico del sito web a partire dalla cartella root
  • Successivamente vi sono due condizioni che se soddisfatte permetteranno l'applicazione della regola (RewriteCond):
    • La prima richiede che non si stia già accedendo tramite protocollo https
    • La seconda richiede che non vi sia già un rendirizzamento da http ad https presente sullo header della richiesta
  • RewriteRule prende due parametri, il primo è un'espressione regolare, il secondo è la sostituzione. In questo caso si sta dicendo di sostituire qualsiasi risorsa venga richiesta ingresso con la sua relativa versione in https. Sono presenti inoltre due flag: [L, R=301]. L sta ad indicare che questa è l'ultima (Last) regola di rewrite che verrà processata, mentre R indica il codice di redirect che verrà applicato, in questo caso 301, ovvero "Moved permanently". In questo modo tutti i motori di ricerca indicizzeranno correttamente la versione https del sito.

Con questa regola Apache, ogniqualvolta un utente visita o accede una qualsiasi risorsa all'interno del sito, effettua un reindirizzamento automatico sulla relativa versione https di quest'ultima.

Altri esempi

Redirigere tutto il traffico ad eccezione di una cartella:

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_URI} !^/dir-to-be-excluded
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

Redirigere il traffico di una singola cartella da http ad https

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /https-directory
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

</IfModule>

Conclusioni

In definitiva il file .htaccess permette di gestire in totale autonomia il problema del reindirizzamento automatico del traffico da http ad https e con un adeguata conoscenza della configurazione di Apache risulta tutto molto flessibile e adattabile facilmente ai diversi casi d'uso.