- Statut
- Résolu
- Signalé pour
- WPML Multilingual CMS 3.2.7
- Résolu dans
- 3.3
Aperçu de l’anomalie
Lors de l’utilisation de langues dans les domaines et d’extensions dont le résultat dépend d’un filtrage correct de la fonction home_url(), substituant la bonne version linguistique de l’URL d’accueil de votre site dans les liens, ces derniers peuvent s’afficher de manière incorrecte. Dans la plupart des cas, cela signifie que la version dans la langue par défaut de votre domaine est utilisée dans les liens au lieu de sa version correcte dans la langue secondaire.
Un autre exemple courant de la manifestation de ce problème est que les sitemaps XML de Yoast WP SEO ne s’affichent pas correctement dans les langues secondaires et montrent à la place une simple page blanche.
Le problème en lui-même n’est pas causé par l’extension WPML, mais par une différence entre les serveurs web Apache et Nginx. Le serveur web Apache renseigne la variable superglobale $_SERVER['SERVER_NAME'] avec l’hôte demandé par les navigateurs. Nginx ne le fait pas par défaut, mais peut également être configuré pour le faire.
Pour ce faire, la solution de contournement ci-dessus utilise simplement la variable $host fournie par le serveur web Nginx et la transmet au démon PHP-FPM gérant vos fichiers .php via l’appel fastgi_param illustré ci-dessus.
Le démon PHP-FPM peut ensuite utiliser cette variable via la superglobale $_SERVER et la configuration imite le comportement par défaut de la configuration Apache + PHP(cgi) plus courante.
Solution de contournement
Trouvez la section qui décrit la façon dont les fichiers .php sont gérés dans le fichier de configuration nginx de votre site.
Elle ressemblera à l’exemple ci-dessous, contenant une directive location ainsi que l’extension de fichier .php.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass php;
fastcgi_keep_conn on;
fastcgi_index index.php;
}
Ajoutez-y la ligne
fastcgi_param SERVER_NAME $host;
et activez ainsi l’index SERVER_NAME dans votre variable superglobale $_SERVER, comme ceci :
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass php;
fastcgi_keep_conn on;
fastcgi_param SERVER_NAME $host;
fastcgi_index index.php;
}Cela permettra au filtrage de home_url() de fonctionner exactement comme sur une configuration Apache, résolvant ainsi les différences de comportement et les problèmes causés par l’utilisation de Nginx.