- Estado
- Resuelto
- Notificado para
- WPML Multilingual CMS 3.2.7
- Resuelto en
- 3.3
Resumen del problema
Al utilizar idiomas en dominios y plugins, cuya salida depende de un filtrado correcto de la función home_url() para sustituir la versión de idioma correcta de la URL de inicio de su sitio en los enlaces, estos pueden mostrarse de forma incorrecta. En la mayoría de los casos, esto significa que se utiliza la versión del idioma predeterminado de su dominio en los enlaces en lugar de su versión correcta en el idioma secundario.
Otro ejemplo común de cómo se manifiesta este problema son los sitemaps de Yoast WP SEO, que no se muestran correctamente en los idiomas secundarios y, en su lugar, muestran una simple página en blanco.
El problema en sí no lo causa el plugin WPML, sino una diferencia entre los servidores web Apache y Nginx. El servidor web Apache rellena la variable superglobal $_SERVER['SERVER_NAME'] con el host solicitado por los navegadores. Nginx no hace esto de forma predeterminada, pero también se puede configurar para hacerlo.
Para lograrlo, la solución alternativa anterior simplemente utiliza la variable $host proporcionada por el servidor web Nginx y se la pasa al demonio PHP-FPM que maneja sus archivos .php mediante la llamada fastgi_param que se muestra arriba.
El demonio PHP-FPM puede entonces usar esta variable a través de la superglobal $_SERVER y la configuración imita el comportamiento predeterminado de la configuración más común de Apache + PHP(cgi).
Solución alternativa
Busque la sección que describe cómo se manejan los archivos .php en el archivo de configuración de nginx de su sitio.
Se verá similar al siguiente ejemplo, y contendrá una declaración location, así como la extensión de archivo .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;
}
Añada la línea
fastcgi_param SERVER_NAME $host;
a esta sección para activar el índice SERVER_NAME en su variable superglobal $_SERVER, de esta manera:
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;
}Esto hará que el filtrado de home_url() funcione exactamente igual que en una configuración de Apache, resolviendo las diferencias de comportamiento y los problemas causados por el uso de Nginx.