WPML
상태
해결됨
보고된 제품
WPML Multilingual CMS 3.2.7
해결된 버전
3.3

문제 개요

도메인에 언어를 사용하고, 링크에 사이트 홈 URL의 올바른 언어 버전을 대체하는 `home_url()` 함수의 올바른 필터링에 출력이 의존하는 플러그인을 사용하는 경우 링크가 잘못 표시될 수 있습니다. 대부분의 경우 이는 링크에 올바른 보조 언어 버전 대신 도메인의 기본 언어 버전이 사용됨을 의미합니다.

이 문제가 나타나는 또 다른 일반적인 예는 보조 언어에서 Yoast WP SEO 사이트맵이 제대로 표시되지 않고 단순한 흰색 페이지만 표시되는 경우입니다.

이 문제 자체는 WPML 플러그인으로 인해 발생하는 것이 아니라 Apache와 Nginx 웹 서버 간의 차이 때문입니다. Apache 웹 서버는 브라우저가 요청한 호스트로 $_SERVER['SERVER_NAME'] 슈퍼글로벌 변수를 채웁니다. Nginx는 기본적으로 이 작업을 수행하지 않지만, 동일하게 수행하도록 구성할 수 있습니다.

이를 위해 위의 임시 해결 방법은 단순히 Nginx 웹 서버에서 제공하는 $host 변수를 사용하여 위에 표시된 fastgi_param 호출을 통해 .php 파일을 처리하는 PHP-FPM 데몬으로 전달합니다.

그러면 PHP-FPM 데몬은 $_SERVER 슈퍼글로벌을 통해 이 변수를 사용할 수 있으며, 이 설정은 더 일반적인 Apache + PHP(cgi) 설정의 기본 동작을 모방합니다.

임시 해결 방법

사이트의 nginx 구성 파일에서 .php 파일이 처리되는 방식을 설명하는 섹션을 찾으세요.
아래 예제와 비슷하며, .php 파일 확장자와 location 문을 포함합니다.

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 사용으로 인해 발생하는 동작 차이와 문제를 해결합니다.

알려진 모든 문제 →