- Status
- Gelöst
- Gemeldet für
- WPML Multilingual CMS 3.2.7
- Gelöst in
- 3.3
Übersicht über das Problem
Wenn Sie Sprachen in Domains und Plugins verwenden, deren Ausgabe von einer korrekten Filterung der Funktion home_url() abhängt, um die richtige Sprachversion der Startseiten-URL Ihrer Website in Links einzusetzen, können Links fehlerhaft angezeigt werden. In den meisten Fällen bedeutet dies, dass in Links die Domain-Version der Standardsprache anstelle der korrekten Version der Sekundärsprache verwendet wird.
Ein weiteres häufiges Beispiel für dieses Problem sind Sitemaps von Yoast WP SEO, die in Sekundärsprachen nicht richtig angezeigt werden und stattdessen nur eine weiße Seite zeigen.
Das Problem selbst wird nicht durch das WPML-Plugin verursacht, sondern durch einen Unterschied zwischen den Webservern Apache und Nginx. Der Apache-Webserver füllt die superglobale Variable $_SERVER['SERVER_NAME'] mit dem vom Browser angeforderten Host. Nginx tut dies standardmäßig nicht, kann aber ebenfalls dafür konfiguriert werden.
Dafür verwendet die oben genannte Problemumgehung einfach die vom Nginx-Webserver bereitgestellte Variable $host und gibt sie über den oben gezeigten Aufruf fastgi_param an den PHP-FPM-Daemon weiter, der Ihre .php-Dateien verarbeitet.
Der PHP-FPM-Daemon kann diese Variable dann über die Superglobale $_SERVER nutzen, und die Einrichtung ahmt das Standardverhalten der weiter verbreiteten Einrichtung von Apache + PHP(cgi) nach.
Problemumgehung
Suchen Sie den Abschnitt, der beschreibt, wie .php-Dateien in der Nginx-Konfigurationsdatei Ihrer Website verarbeitet werden.
Er sieht ähnlich aus wie im folgenden Beispiel und enthält eine location-Anweisung sowie die .php-Dateiendung.
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;
}
Fügen Sie diesem die Zeile
fastcgi_param SERVER_NAME $host;
hinzu und aktivieren Sie damit den SERVER_NAME-Index in Ihrer superglobalen Variablen $_SERVER, wie folgt:
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;
}Dadurch funktioniert das Filtern von home_url() genau wie bei einer Apache-Einrichtung, wodurch Verhaltensunterschiede und Probleme behoben werden, die durch die Verwendung von Nginx verursacht werden.