WPML
סטטוס
נפתר
דווח עבור
WPML Multilingual CMS 3.2.7
נפתר בגרסה
3.3

סקירה כללית של התקלה

בעת שימוש בשפות בדומיינים ובתוספים, שהפלט שלהם תלוי בסינון תקין של הפונקציה home_url(), אשר מחליפה את כתובת ה־URL של דף הבית של האתר שלך לגרסת השפה הנכונה בתוך קישורים, קישורים עלולים להיות מוצגים באופן שגוי. ברוב המקרים, המשמעות היא שנעשה שימוש בגרסת שפת ברירת המחדל של הדומיין שלך בקישורים, במקום בגרסת השפה המשנית הנכונה שלו.

דוגמה נפוצה נוספת להופעתה של בעיה זו היא מפות אתר של Yoast WP SEO שאינן מוצגות כראוי בשפות משניות, ובמקום זאת מציגות דף לבן בלבד.

הבעיה עצמה אינה נגרמת על ידי התוסף WPML, אלא נובעת מהבדל בין שרתי האינטרנט Apache ו־Nginx. שרת האינטרנט Apache מאכלס את המשתנה הסופר־גלובלי $_SERVER['SERVER_NAME'] במארח המבוקש על ידי הדפדפנים. Nginx אינו עושה זאת כברירת מחדל, אך ניתן להגדיר אותו לעשות זאת גם כן.

כדי לעשות זאת, הפתרון העוקף שלעיל פשוט משתמש במשתנה $host המסופק על ידי שרת האינטרנט Nginx, ומעביר אותו ל־daemon של PHP-FPM המטפל בקובצי ה־.php שלך באמצעות הקריאה fastgi_param המוצגת לעיל.

לאחר מכן, ה־daemon של PHP-FPM יכול להשתמש במשתנה זה באמצעות המשתנה הסופר־גלובלי $_SERVER, וההגדרה מחקה את התנהגות ברירת המחדל של ההגדרה הנפוצה יותר של Apache + PHP(cgi).

פתרון עוקף

מצא את הקטע שמתאר את האופן שבו קובצי .php מטופלים בקובץ התצורה של nginx באתר שלך.
הוא ייראה דומה לדוגמה שבהמשך, ויכיל הצהרת מיקום וכן את סיומת הקובץ .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 במשתנה הסופר גלובלי $_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.

כל התקלות הידועות →