WPML
ステータス
解決済み
報告対象
WPML Multilingual CMS 3.2.7
解決されたバージョン
3.3

問題の概要

ドメインで言語を使用しており、出力がhome_url()関数の正しいフィルタリング(リンクにサイトのホームURLの正しい言語バージョンを代入する処理)に依存するプラグインを使用している場合、リンクが正しく表示されないことがあります。ほとんどの場合、これは正しいセカンダリ言語バージョンの代わりに、ドメインのデフォルト言語バージョンがリンクに使用されることを意味します。

この問題が発生するもう1つのよくある例として、セカンダリ言語でYoast WP SEOのサイトマップが正しく表示されず、単なる真っ白なページが表示される現象があります。

この問題自体はWPMLプラグインが原因ではなく、ApacheとNginx Webサーバーの違いによるものです。Apache Webサーバーは、ブラウザーからリクエストされたホストをスーパーグローバル変数$_SERVER['SERVER_NAME']に格納します。Nginxはデフォルトではこれを行いませんが、行うように設定することもできます。

これを行うため、上記の回避策では単にNginx Webサーバーが提供する変数$hostを使用し、上で示したfastgi_paramの呼び出しを通じて、.phpファイルを処理するPHP-FPMデーモンにその変数を渡します。

これにより、PHP-FPMデーモンは$_SERVERスーパーグローバルを介してこの変数を使用できるようになり、一般的なApache + PHP(cgi)セットアップのデフォルトの動作を模倣するセットアップになります。

回避策

サイトのnginx設定ファイルから、.phpファイルの処理方法が記述されているセクションを見つけます。
以下の例のように、locationステートメントと.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;
    }

次の行

fastcgi_param SERVER_NAME $host;

を追加して、$_SERVERスーパーグローバル変数のSERVER_NAMEインデックスを次のように有効化します。
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;
    }

これにより、home_url()のフィルターがApacheのセットアップとまったく同じように機能するようになり、Nginxの使用によって引き起こされる動作の違いや問題が解決されます。

すべての既知の問題 →