bug HTTPS dans la fonction url_de_base() sur certains serveurs mal configurés
Bonjour,
voici le contexte : le serveur web de mon hébergeur est mal configuré (et je n'ai malheureusement pas réussi à leur faire corriger le problème). Le site web [[https://bcl.cnrs.fr]] est accessible aussi bien en HTTP qu'en HTTPS, mais en allant sur /ecrire/?exec=info je vois que le serveur ne renseigne ni la variable $_SERVER['HTTPS'] ni la variable $_SERVER["SCRIPT_URI"], et à vrai dire lorsque je compare sur ce serveur un phpinfo() en HTTP et un phpinfo() en HTTPS je vois qu'il y n'a strictement AUCUNE différence entre les deux, et qu'il est donc totalement impossible de savoir (côté serveur) si la requête a été faite en HTTP ou en HTTPS.
Dans ce contexte bien précis, le code de la fonction url_de_base() situé dans /ecrire/inc/utils.php pose problème, car il se base sur le contenu de ces deux variables $_SERVER['HTTPS'] et $_SERVER["SCRIPT_URI"] pour choisir entre HTTP et HTTPS et il ne tient absolument pas compte du contenu du champ META(adresse_site), ce qui dans mon cas est bien dommage car j'y ai mis l'url en https:...
La conséquence de tout ceci est qu'en HTTPS cela entraîne des problèmes d'affichage d'images et de CSS qui ne sont pas bien appliqués, cf. [[https://contrib.spip.net/Passer-un-site-SPIP-sous-https#forum491839]]. Sur ce forum, vous verrez que je ne suis pas le seul à avoir affaire à un serveur mal configuré de la sorte, et que nous sommes plusieurs à avoir ce même problème. La solution de bricolage donnée par un des participants du forum est de rajouter dans /config/mes_options.php les deux lignes suivantes :
$_SERVER['HTTPS'] = "on"; $_SERVER['SERVER_PORT']='443';
Ca fonctionne, certes, et c'est donc ce que j'ai fait pour mon site, mais c'est vraiment du bricolage et c'était pas évident de trouver cette astuce !
Pour faire plus propre et plus simple, serait-il possible à l'avenir de modifier le code de url_de_base() pour qu'en l'absence de ces deux variables $_SERVER['HTTPS'] et $_SERVER["SCRIPT_URI"], la fonction aille regarder dans META(adresse_site) si c'est du http ou du https qui y est renseigné (au lieu de mettre forcément du http) ? En effet, lorsque META(adresse_site) commence par "https://" ça veut dire que le serveur gère le HTTPS, et donc s'il ne renseigne pas les variables HTTPS et SCRIPT_URI et bien dans le doute mieux vaut générer des url de base en "https://" plutôt qu'en "http://" car si cette url de base se retrouve mentionnée au sein d'un fichier html ou css, et que le fichier en question est demandé en HTTP, ce n'est pas grave s'il contient des ressources en HTTPS, alors que le contraire pose problème (ne pas mettre de ressources en HTTP au sein d'une page en HTTPS !)