WPML
Stato
Risolto
Segnalato per
WPML Multilingual CMS 3.2.7
Risolto in
3.3

Panoramica del problema

Quando utilizzi le lingue nei domini e plugin il cui output dipende da un corretto filtraggio della funzione home_url(), che sostituisce nei link la versione nella lingua corretta dell’URL della home del tuo sito, i link possono essere visualizzati in modo errato. Nella maggior parte dei casi questo significa che nei link viene usata la versione nella lingua predefinita del tuo dominio invece della sua corretta versione nella lingua secondaria.

Un altro esempio comune di come si manifesta questo problema è quando le sitemap di Yoast WP SEO non vengono visualizzate correttamente nelle lingue secondarie, mostrando invece una semplice pagina bianca.

Il problema in sé non è causato dal plugin WPML, ma da una differenza tra i webserver Apache e Nginx. Il webserver Apache popola la variabile superglobale $_SERVER['SERVER_NAME'] con l’host richiesto dai browser. Nginx non lo fa per impostazione predefinita, ma può essere configurato per farlo.

Per fare questo, la soluzione alternativa precedente usa semplicemente la variabile $host fornita dal webserver Nginx e la passa al demone PHP-FPM che gestisce i tuoi file .php tramite la chiamata fastgi_param mostrata sopra.

Il demone PHP-FPM può quindi usare questa variabile tramite la superglobale $_SERVER e la configurazione imita il comportamento predefinito della più comune configurazione Apache + PHP(cgi).

Soluzione alternativa

Trova la sezione che descrive il modo in cui vengono gestiti i file .php nel file di configurazione nginx del tuo sito.
Sarà simile all’esempio qui sotto, contenente un’istruzione location e l’estensione del file .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;
    }

Aggiungi la riga

fastcgi_param SERVER_NAME $host;

al suo interno per abilitare l’indice SERVER_NAME nella tua variabile superglobale $_SERVER, in questo modo:
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;
    }

Questo farà in modo che il filtraggio di home_url() funzioni esattamente come in una configurazione Apache, risolvendo le differenze di comportamento e i problemi causati dall’uso di Nginx.

Tutti i problemi noti →