رفع ارور 500 در صفحه افزونه های وردپرس در زمان قطعی اینترنت
بهمن 5, 1404 1404-11-05 10:25رفع ارور 500 در صفحه افزونه های وردپرس در زمان قطعی اینترنت
رفع ارور 500 در صفحه افزونه های وردپرس در زمان قطعی اینترنت
مقدمه
یکی از مشکلاتی که بعضی مدیران سایتهای وردپرسی، بهخصوص روی سرورهای داخلی، لوکال یا سرورهایی با محدودیت دسترسی به اینترنت با آن مواجه میشوند، باز نشدن یا لود نشدن بخش افزونهها (Plugins) در پیشخوان وردپرس است.
در این حالت معمولاً صفحه افزونهها سفید میماند، بهصورت ناقص لود میشود یا برای مدت طولانی در حالت Loading باقی میماند و ارور 500 را نمایش میدهد.
ریشه این مشکل در بسیاری از مواقع به درخواستهای خارجی وردپرس به سرورهای wordpress.org یا APIهای مرتبط بازمیگردد. وردپرس هنگام بارگذاری صفحه افزونهها، بهصورت خودکار اقدام به ارسال درخواستهایی برای بررسی آپدیتها، دریافت اطلاعات افزونهها و ارتباط با API رسمی میکند. اگر این درخواستها به هر دلیلی پاسخ نگیرند، کل صفحه دچار اختلال میشود.
در این مقاله، کدی را بررسی میکنیم که با غیرفعالسازی کامل درخواستهای خارجی وردپرس، این مشکل را بهطور قطعی برطرف میکند.
علت اصلی مشکل باز نشدن بخش افزونهها
وردپرس در پسزمینه عملیات زیر را انجام میدهد:
- بررسی آپدیت افزونهها و قالبها
- ارتباط با
wordpress.org - اجرای WP-Cron برای تسکهای زمانبندیشده
- بررسی دسترسی به APIهای رسمی
در شرایط زیر این درخواستها میتوانند باعث اختلال شوند:
- ایران اکسس بودن ایترنت
- سرور بدون دسترسی به اینترنت
- فایروال یا تحریم IP
- DNS ناپایدار
- سرورهای اینترانت یا سازمانی
- محدودیتهای امنیتی هاستینگ
در چنین حالتی وردپرس منتظر پاسخ میماند و نتیجه آن، لود نشدن صفحه افزونهها و در نهایت نمایش ارور 500 است.
راهحل قطعی: غیرفعالسازی درخواستهای خارجی وردپرس
کد زیر با هدف حذف کامل وابستگی وردپرس به ارتباطات خارجی نوشته شده و در عمل مشکل باز نشدن بخش افزونهها را حل میکند.
شما میتوانید این کد رو در انتهای فایل wp-config.php در Root هاست کپی کنید، و پس از رفع محدودیت ها میتوانید این کد رو حذف کنید.
/** Disable WordPress external requests */
define('WP_HTTP_BLOCK_EXTERNAL', true);
define('WP_HTTP_ALLOW_LOCALHOST', true);
/** Disable updates & API calls */
define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_AUTO_UPDATE_CORE', false);
define('DISABLE_WP_CRON', true);
/** Disable WordPress.org API */
add_filter('pre_http_request', function ($pre, $args, $url) {
if (strpos($url, 'wordpress.org') !== false) {
return new WP_Error('blocked', 'External requests blocked');
}
return $pre;
}, 10, 3);
define('DISALLOW_FILE_MODS', true);
بررسی دقیق عملکرد هر بخش از کد
1. مسدودسازی کامل درخواستهای خارجی
define('WP_HTTP_BLOCK_EXTERNAL', true);
define('WP_HTTP_ALLOW_LOCALHOST', true);
این دو خط به وردپرس اعلام میکند:
- هیچ درخواست HTTP خارجی ارسال نشود
- فقط ارتباطهای لوکال (localhost یا IP داخلی) مجاز باشند
این بخش هستهی اصلی حل مشکل است.
2. غیرفعالسازی آپدیتها و ارتباط با API
define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_AUTO_UPDATE_CORE', false);
وردپرس در زمان لود صفحه افزونهها، وضعیت آپدیت را بررسی میکند. با غیرفعالسازی آپدیتها:
- تماس با سرورهای وردپرس حذف میشود
- سرعت و پایداری پنل مدیریت افزایش مییابد
3. غیرفعالسازی WP-Cron
define('DISABLE_WP_CRON', true);
WP-Cron در بسیاری از موارد نیازمند ارتباط خارجی یا پردازش زمانبر است. غیرفعالسازی آن:
- از اجرای درخواستهای ناخواسته جلوگیری میکند
- بهخصوص در سرورهای محدود یا اینترانت ضروری است
4. مسدودسازی مستقیم wordpress.org
add_filter('pre_http_request', function ($pre, $args, $url) {
if (strpos($url, 'wordpress.org') !== false) {
return new WP_Error('blocked', 'External requests blocked');
}
return $pre;
}, 10, 3);
این فیلتر یک لایه امنیتی اضافه ایجاد میکند:
- هرگونه تلاش برای ارتباط با
wordpress.orgبلافاصله متوقف میشود - حتی اگر تنظیمات دیگر تغییر کنند، این فیلتر همچنان فعال باقی میماند
5. غیرفعالسازی تغییرات فایل از پنل
define('DISALLOW_FILE_MODS', true);
این گزینه:
- نصب افزونه و قالب از پنل را غیرفعال میکند
- از ویرایش فایلها جلوگیری میکند
- باعث میشود وردپرس دیگر برای بررسی دسترسی فایلها درخواست خارجی ارسال نکند
نتیجه نهایی
پس از اعمال این کد:
- بخش افزونههای وردپرس بدون تأخیر باز میشود
- مشکل لود نشدن یا سفید ماندن صفحه Plugins برطرف میشود
- وابستگی وردپرس به سرورهای خارجی به صفر میرسد
- پایداری و امنیت پنل مدیریت افزایش مییابد
این راهحل بهویژه برای موارد زیر کاملاً مناسب است:
- سرورهای داخلی و سازمانی
- سایتهای بدون نیاز به آپدیت خودکار
- محیطهای تست و توسعه
- سرورهای دارای محدودیت دسترسی اینترنت