WPML
สถานะ
แก้ไขแล้ว
รายงานสำหรับ
WPML Multilingual CMS 3.2.7
แก้ไขใน
3.3

ภาพรวมของปัญหา

เมื่อใช้ภาษาในโดเมนและปลั๊กอิน ซึ่งเอาต์พุตขึ้นอยู่กับการกรองฟังก์ชัน home_url() ที่ถูกต้องเพื่อแทนที่ URL หน้าแรกของไซต์ของคุณเป็นเวอร์ชันภาษาที่ถูกต้องในลิงก์ ลิงก์อาจแสดงผลอย่างไม่ถูกต้อง ในกรณีส่วนใหญ่ สิ่งนี้หมายความว่ามีการใช้โดเมนเวอร์ชันภาษาเริ่มต้นในลิงก์ แทนที่จะเป็นเวอร์ชันภาษารองที่ถูกต้องของโดเมนนั้น

อีกตัวอย่างหนึ่งที่พบบ่อยของปัญหานี้คือ ไซต์แมป XML ของ Yoast WP SEO ไม่แสดงผลอย่างถูกต้องในภาษารอง และแสดงเพียงหน้าสีขาวแทน

ปัญหาดังกล่าวไม่ได้เกิดจากปลั๊กอิน WPML แต่เกิดจากความแตกต่างระหว่างเว็บเซิร์ฟเวอร์ Apache และ Nginx เว็บเซิร์ฟเวอร์ Apache จะกำหนดค่าตัวแปร superglobal $_SERVER['SERVER_NAME'] ด้วยโฮสต์ที่เบราว์เซอร์ร้องขอ Nginx จะไม่ทำเช่นนี้ตามค่าเริ่มต้น แต่สามารถกำหนดค่าให้ทำเช่นนั้นได้เช่นกัน

เพื่อดำเนินการดังกล่าว วิธีแก้ปัญหาชั่วคราวข้างต้นจะใช้ตัวแปร $host ที่เว็บเซิร์ฟเวอร์ Nginx จัดเตรียมไว้ให้ และส่งต่อไปยัง PHP-FPM daemon ที่จัดการไฟล์ .php ของคุณผ่านการเรียก fastgi_param ดังที่แสดงไว้ข้างต้น

จากนั้น PHP-FPM daemon จะสามารถใช้ตัวแปรนี้ผ่านตัวแปร superglobal $_SERVER และการตั้งค่านี้จะเลียนแบบพฤติกรรมเริ่มต้นของการตั้งค่า Apache + PHP(cgi) ที่พบได้ทั่วไปมากกว่า

วิธีแก้ปัญหาชั่วคราว

ค้นหาส่วนที่อธิบายวิธีการจัดการไฟล์ .php ในไฟล์การตั้งค่า nginx ของไซต์ของคุณ
ส่วนนี้จะมีลักษณะคล้ายกับตัวอย่างด้านล่าง ซึ่งประกอบด้วยคำสั่ง 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_NAME ในตัวแปร superglobal $_SERVER ของคุณ ดังนี้:
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

ปัญหาที่ทราบแล้วทั้งหมด →