واجه API REST خطأ
شيء ما أجاب على الطلب الذي لم يكن WordPress ، أو أجاب عليه مع HTML. يتوقف المحرر عن العمل أولاً ، لأنه يعتمد على واجهة برمجة التطبيقات لكل شيء.
The REST API encountered an error: The REST API request failed due to an error.
اطلب مسار REST مباشرة وانظر إلى ما يعود. JSON يعني أن واجهة برمجة التطبيقات على قيد الحياة والمشكلة هي المصادقة ؛ صفحة خطأ HTML تعني شيئًا أمام WordPress اعترضت الطريق قبل إجابة PHP.
الأسباب الأرجح أولًا.
افحص القائمة بالترتيب. يتيح لك كل فحص تأكيد السبب أو استبعاده قبل تغيير أي شيء، لأن الحلول تختلف والتخمين يكلّف أكثر من تنفيذ أمر للتحقق.
| السبب | كيفية التحقق | الإصلاح |
|---|---|---|
| A ملحق أمان أو WAF كتل الطريق | الطلب يعيد HTML أو 403 من شيء ليس WordPress ، ويتم تسجيل الكتلة بواسطة المكون الإضافي أو جدار الحماية بدلاً من WordPress. | السماح /wp-json/ للمستخدمين المصادق عليهم. القواعد المكتوبة لإيقاف تعداد المستخدم كثيرا ما تمنع مساحة الاسم بالكامل بدلا من نقطة النهاية الواحدة التي كانت تستهدفها. |
| الروابط الثابتة مكسورة بحيث لا يتم حل الطريق أبداً | الطريق الجميل 404s بينما يجيب نموذج سلسلة الاستعلام بشكل صحيح. هذا الاختلاف يعزلها لإعادة كتابة القواعد. | اغسل القواعد التي أعيد كتابتها. مسار REST هو إعادة كتابة مثل أي مسار آخر ، لذلك يختفي عندما تكون قديمة. |
| يتم تجريد ترويسة التفويض | تعمل الطرق غير المصادق عليها وتفيد المسارات المصادق عليها أنك لم تسجل الدخول ، على الرغم من أنك كذلك. | مرر رأس التفويض إلى PHP على خادم الويب. تقوم إعدادات نمط CGI بإفلاته افتراضيًا ، وتتوقف كلمات مرور التطبيق عن العمل تمامًا عندما تفعل ذلك. |
| ينبعث البرنامج المساعد الإخراج قبل JSON | الرد هو JSON صالح مع شيء أمامه - إشعار ، سطر فارغ طائش - مما يجعله غير قابل للتفسير. | ابحث عن طباعة المكون الإضافي مبكرًا. عادة ما يؤدي نفس الإخراج الضال إلى كسر الخلاصات وينتج تحذيرًا مرسلًا بالفعل في مكان آخر. |
الإصلاح خطوة بخطوة.
تفترض الأوامر توفر WP-CLI والوصول إلى سطر الأوامر. إن لم يتوفرا، تشرح كل خطوة الإجراء كي تنفذه من لوحة التحكم أو عبر SFTP.
اسأل API عن الفهرس
لا يتطلب هذا المسار أي مصادقة ، لذا فإن أي شيء آخر غير JSON هو الحل.
curl -sS -i https://example.com/wp-json/ | head -n 20
قارن بين التوجيه الجميل والسهل
إذا كان العمل الثاني لا يعمل، فإن إعادة كتابة القواعد هي المشكلة ولا شيء آخر يحتاج إلى اختبار.
curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/wp-json/wp/v2/types' curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/?rest_route=/wp/v2/types'إعادة بناء قواعد إعادة الكتابة
رخيصة وآمنة، ويحدد حصة مفاجئة من هذه.
wp rewrite flush --hard
تأكيد بقاء ترويسة التفويض
أضف هذا إلى خادم الويب أو .htaccess عندما تكون الطرق المصادق عليها هي الوحيدة التي تفشل.
# .htaccess SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 # nginx + fastcgi fastcgi_param HTTP_AUTHORIZATION $http_authorization;
الإضافات Bisect إذا كان لا يزال فشل
اختبر المسار بين كل تعطيل وليس في النهاية ، لذلك البرنامج المساعد الذي يصلحه لا لبس فيه.
wp plugin deactivate --all curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/wp-json/
ما تتولاه المنصة عنك.
لا يوجد شيء بين الطلب و WordPress الذي يعيد كتابة أو فحص /wp-json / ، وبالتالي يصل المسار إلى PHP سليمًا ويصل الرأس معه - السببان اللذان يمثلان معظم هذه الأسباب. قواعد الرابط الثابت هي جزء من تكوين الموقع الخاص بدلاً من ملف مشترك تقوم المواقع الأخرى أيضًا بتحريره ، لذلك لا تذهب قديمة عند نشر شيء غير ذي صلة.
الأسئلة الشائعة.
هل يمكنني تعطيل واجهة برمجة تطبيقات REST؟
يقول المحرر "فشل التحديث" - هل هذه هي المشكلة نفسها؟
لماذا يعمل عندما يتم تسجيل الخروج ولكن لم يتم تسجيل الدخول؟
هل 404 على /wp-json / يختلف عن 403؟
إن لم يكن هذا هو السبب.
قد تبدو هذه الأخطاء متشابهة في المتصفح.