WPML
Trạng thái
Đã giải quyết
Được báo cáo cho
WPML Multilingual CMS 3.2.7
Đã giải quyết trong
3.3

Tổng quan về lỗi

Khi sử dụng ngôn ngữ trong tên miền và plugin có đầu ra phụ thuộc vào việc lọc chính xác hàm home_url() để thay thế phiên bản ngôn ngữ đúng của URL trang chủ trong liên kết, các liên kết có thể hiển thị không chính xác. Trong hầu hết các trường hợp, điều này có nghĩa là phiên bản ngôn ngữ mặc định của tên miền được sử dụng trong các liên kết thay vì phiên bản ngôn ngữ phụ chính xác.

Một ví dụ phổ biến khác về sự cố này là các sitemap của Yoast WP SEO không hiển thị đúng trong các ngôn ngữ phụ và thay vào đó chỉ hiển thị một trang trắng.

Bản thân sự cố không phải do plugin WPML gây ra mà do sự khác biệt giữa máy chủ web Apache và Nginx. Máy chủ web Apache điền vào biến siêu toàn cục $_SERVER['SERVER_NAME'] thông tin host do trình duyệt yêu cầu. Nginx không thực hiện điều này theo mặc định, nhưng cũng có thể được cấu hình để làm như vậy.

Để thực hiện điều này, giải pháp tạm thời ở trên chỉ đơn giản là sử dụng biến $host do máy chủ web Nginx cung cấp và truyền nó cho trình nền PHP-FPM xử lý các tệp .php của bạn thông qua lệnh gọi fastgi_param được hiển thị ở trên.

Trình nền PHP-FPM sau đó có thể sử dụng biến này thông qua biến siêu toàn cục $_SERVER và thiết lập này mô phỏng hành vi mặc định của thiết lập Apache + PHP(cgi) phổ biến hơn.

Giải pháp tạm thời

Tìm phần mô tả cách xử lý các tệp .php trong tệp cấu hình nginx trên trang web của bạn.
Phần này sẽ trông giống với ví dụ bên dưới, chứa một câu lệnh location cũng như phần đuôi tệp .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;
    }

Thêm dòng

fastcgi_param SERVER_NAME $host;

vào đó và qua đó bật chỉ mục SERVER_NAME trong biến siêu toàn cục $_SERVER của bạn, như sau:
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;
    }

Điều này sẽ khiến quá trình lọc home_url() hoạt động chính xác như trên thiết lập Apache, giải quyết các điểm khác biệt về hành vi và các sự cố do việc sử dụng Nginx gây ra.

Tất cả các lỗi đã ghi nhận →