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 ويمرره إلى خدمة PHP-FPM التي تعالج ملفات .php الخاصة بك عبر استدعاء fastgi_param الموضّح أعلاه.

يمكن لخدمة PHP-FPM بعد ذلك استخدام هذا المتغير عبر المتغير العام الفائق $_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 في المتغير العام $_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.

جميع المشاكل المعروفة →