Quando un sito passa dalla versione non sicura (http://) a quella crittografata in https, è necessario effettuare il redirect 301 di tutte le pagine, potrebbe tuttavia essere necessario escludere alcune pagine o sottocartelle da tale redirect. Vediamo cosa inserire nel file .htaccess di Apache per ottenere questo risultato.
Sappiamo infatti che a partire da Gennaio 2017, Google ha iniziato a penalizzare i siti che non fanno uso di https, segnalandoli come non sicuri e premiando invece quelli sicuri, anche in termini di posizionamento sui risultati di ricerca.
Ciò induce a migrare i siti internet al protocollo sicuro, per farlo ci sono vari metodi che esulano dal presente articolo e che sono di seguito accennati a puro scopo informativo:
- Alcuni provider includono già questo protocollo e basta fare il cambio dal pannello di controllo del sito
- Si acquista un certificato SSL e lo si abbina al proprio dominio sempre tramite i pannelli di amministrazione del sito o direttamente in Apache.
A questo punto, avendo il sito in https, si fa in modo che il contenuto di questa versione sicura del sito sia la stessa presente nella vecchia versione http, ciò si ottiene facilmente o tramite pannello di controllo, oppure si crea manualmente un link simbolico dalla cartella private_html alla cartella public_html.
Occorre poi fare in modo che i visitatori delle vecchie pagine vengano rediretti automaticamente alle pagine sicure, cioè se ad esempio il visitatore apre il link:
http://www.miosito.ext/pagina_1.html
sia rediretto tramite un redirect 301 (Moved Permanently) al link:
https://www.miosito.ext/pagina_1.html
Così facendo, il visitatore si troverà sempre sulle pagine sicure del nostro sito e i motori di ricerca elimineranno gradualmente le indicizzazioni delle pagine http a favore delle https.
Per fare questo redirect entra in gioco il file .htaccess, collocato nella radice dei file system che ospita i contenuti del nostro sito. Potrebbe tuttavia essere necessario escludere alcune sottocartelle o file da tale redirect, ad esempio potremmo avere alcuni script realizzati in tempi remoti che devono andare a pescare contenuti su http che non funzionerebbero se si trovano di fronte a un redirect.
Ecco quindi la versione completa del file .htaccess che ci consente di ottenere questo risultato. Supponiamo di voler escludere dal redirect le cartelle “script_vecchi_1”, “script_vecchi_2” e “file_vecchio.php”, il file avrà il seguente contenuto:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/script_vecchi_1
RewriteCond %{REQUEST_URI} !^/script_vecchi_2
RewriteCond %{REQUEST_URI} !^/file_vecchio\.php
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Unica nota da aggiungere, la riga:
RewriteCond %{HTTPS} off
ci dice che quando l’utente sta chiedendo pagine nella versione https del sito, le regole di redirect NON verranno applicate, come è logico che sia, altrimenti ci troveremmo in un loop di redirect.