Remplacer toutes les occurrences HTTP d’une base de données MySQL en HTTPS

Utiliser un CMS tel que WordPress a ses avantages mais aussi ses inconvénients car moult éléments y sont stockés avec leur URL et même leur protocol.
Or, avec le passage de tous les sites en HTTPS (merci Let’s Encrypt!), certains liens vers des contenus hébergés pourtant en interne sont affichés en HTTP et génèrent donc une alerte (puisque aucun contenu HTTP ne peut être contenu ou affiché depuis une page en HTTPS.

Pour remédier à cela, voici un petit script qui va scruter toutes les tables d’une base de données et, pour chacun de ses champs, remplacer les occurences de « http://www.domain.com » en « https://www.domain.com »:

  1.  
  2. //Se connecter au préalable à la base de données désirée      
  3. "SHOW TABLES""\r\n"‘:’;
  4.    
  5.     $query = "select concat(
  6.   ‘UPDATE ‘, table_name, ‘ SET ‘,
  7.   column_name,
  8.   ‘ = REPLACE(‘, column_name, ‘,  »http://www.domain.com »,  »https://www.domain.com »);’)
  9. from information_schema.columns
  10. where table_name = ‘""’;"‘.’;
  11.     }
  12. }
  13.  

(Librement adapté de: https://stackoverflow.com/questions/3145076/replace-all-fields-in-mysql)

En bonus, voici également les 2 petites lignes à ajouter dans votre .htaccess pour rediriger vos visiteurs vers la version sécurisée de votre site automatiquement:

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.domain.com/$1 [R,L]