WordPress wp-admin में 403 त्रुटि: load-styles.php / load-scripts.php (Wordfence WAF / auto_prepend_file)
सारांश
WordPress या प्लगइन अपडेट के बाद, कुछ वेबसाइट पर अचानक wp-admin स्क्रीन ठीक से नहीं दिखती:
- लॉगिन हो जाता है, लेकिन एडमिन डैशबोर्ड बिना स्टाइल के, खाली या अधूरा लोड हुआ दिखता है।
- ब्राउज़र DevTools → Network में दिखता है 403 Forbidden इनके लिए:
wp-admin/load-styles.phpwp-admin/load-scripts.php
- wp-admin से प्लगइन बंद करने, या यहाँ तक कि नाम बदलने से भी
wp-content/plugins, करता है आपकी 403 की समस्या ठीक करें।
कई मामलों में, इसका मूल कारण root है Wordfence Web Application Firewall (WAF) अब भी लोड हो रहा है, इसके माध्यम से auto_prepend_file में .htaccess और/या .user.ini, प्लगइन बंद करने के बाद भी।
लक्षण
- WordPress एडमिन आंशिक रूप से या CSS/JS के बिना लोड होता है।
- आपके ब्राउज़र के DevTools → Network टैब में:
wp-admin/load-styles.phpऔर/याwp-admin/load-scripts.phpदिखाता है 403 Forbidden.
- Apache एरर लॉग में इसी तरह की पंक्तियाँ दिखाई देती हैं:
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php [authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php - नाम बदलने
wp-content/pluginsया डैशबोर्ड से प्लगइन बंद करने से यह समस्या हल नहीं होती आपकी एरर ठीक हो जाता है।
मूल कारण
जब Wordfence WAF इसमें सक्षम होता है Extended Protection मोड में, यह केवल एक सामान्य WordPress प्लगइन नहीं रहता। यह स्वयं को PHP में भी जोड़ लेता है, इसके माध्यम से auto_prepend_file.
विशेष रूप से, Wordfence:
- जोड़ता है एक
auto_prepend_fileनिर्देश आपके PHP कॉन्फ़िगरेशन में, इसके माध्यम से:.htaccess(Apache).user.ini(प्रति-डायरेक्टरी PHP सेटिंग)
- उस निर्देश को एक बूटस्ट्रैप फ़ाइल की ओर इंगित करता है, जैसे:
# In .htaccess php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php; In .user.ini auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
इससे यह बाध्य होता है कि हर PHP रिक्वेस्ट (फ्रंटएंड, wp-admin, AJAX, cron आदि) लोड करे wordfence-waf.php से पहले WordPress। यदि आप Wordfence प्लगइन को बंद या हटा भी दें, तब भी WAF बूटस्ट्रैप ये कर सकता है:
- कुछ विशेष पाथ ब्लॉक करना (जैसे
load-styles.php,load-scripts.php,wp-cron.php), या - WordPress या PHP अपग्रेड के बाद पुराने/बेमेल कोड के कारण विफल होना।
क्योंकि यह PHP / Apache स्तर पर चलता है, wp-admin में केवल प्लगइन को बंद करना पर्याप्त नहीं है.
कैसे पुष्टि करें कि यह Wordfence / auto_prepend_file है
1. Apache / PHP एरर लॉग जांचें
अपने वर्चुअल होस्ट या ग्लोबल Apache एरर लॉग में इस तरह की लाइनें देखें:
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-styles.php
[authz_core:error] AH01630: client denied by server configuration: /home/USER/public_html/wp-admin/load-scripts.php
यदि आपको इन WordPress कोर एंडपॉइंट पर 403 एरर दिखाई देते हैं और सामान्य प्लगइन बंद करने से भी समस्या हल नहीं होती, तो WAF / auto_prepend_file पर संदेह करें।
2. जांचें .user.ini डॉक्यूमेंट root में
- SSH या फ़ाइल मैनेजर के माध्यम से अपनी साइट के root पर जाएँ (उदाहरण के लिए
/home/USER/public_html). - खोलें
.user.iniऔर इससे मिलती-जुलती लाइन खोजें:auto_prepend_file = "/home/USER/public_html/wordfence-waf.php"
3. जांचें .htaccess Wordfence WAF के लिए
- उसी डायरेक्टरी में खोलें
.htaccess. - Wordfence WAF ब्लॉक खोजें, उदाहरण के लिए:
# Wordfence WAF # <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule>
यदि ये मौजूद हैं, तो प्लगइन निष्क्रिय होने पर भी Wordfence WAF हर PHP रिक्वेस्ट में जोड़ा जा रहा है।
समाधान: Wordfence WAF को सही तरीके से हटाएं
चेतावनी: यह केवल तभी करें जब आप Wordfence WAF को बंद करना चाहते हों। यदि आप Wordfence का उपयोग जारी रखना चाहते हैं, तो Extended Protection को दोबारा कॉन्फ़िगर करने के लिए उसके अपने UI का उपयोग करें।
चरण 1: Wordfence प्लगइन बंद करें (यदि संभव हो)
- wp-admin में लॉग इन करें।
- यहाँ जाएं प्लगइन → इंस्टॉल किए गए प्लगइन.
- निष्क्रिय करें Wordfence Security.
यदि wp-admin पूरी तरह से काम नहीं कर रहा है, तो आप इस चरण को छोड़कर सीधे फाइलें संपादित कर सकते हैं।
चरण 2: हटाएं auto_prepend_file से .user.ini
- अपने WordPress के document root में खोलें
.user.ini. - Wordfence वाली लाइन खोजें:
auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - उसे कमेंट करें या हटा दें, उदाहरण के लिए:
; auto_prepend_file = "/home/USER/public_html/wordfence-waf.php" - फ़ाइल सेव करें।
चरण 3: हटाएँ auto_prepend_file से .htaccess
- उसी डायरेक्टरी में खोलें
.htaccess. - Wordfence WAF ब्लॉक देखें, जैसे:
# Wordfence WAF <IfModule mod_php7.c> php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php </IfModule> - इसे कमेंट आउट करें या हटा दें:
# Wordfence WAF disabled # <IfModule mod_php7.c> # php_value auto_prepend_file /home/USER/public_html/wordfence-waf.php # </IfModule> - फ़ाइल सेव करें।
चरण 4: opcode कैश साफ़ करें / PHP रीस्टार्ट करें (वैकल्पिक, लेकिन अनुशंसित)
- यदि आप PHP-FPM / LSAPI / FastCGI का उपयोग कर रहे हैं, तो PHP-FPM या LiteSpeed / Apache को रीस्टार्ट करें।
- वैकल्पिक रूप से, आप अपने होस्टिंग प्रदाता से उस अकाउंट के लिए PHP opcache साफ़ करने के लिए कह सकते हैं।
चरण 5: wp-admin का परीक्षण करें
- खोलें
/wp-admin/अपने ब्राउज़र में। - DevTools → Network खोलें, फिर पेज को रीलोड करें।
- जाँचें:
wp-admin/load-styles.phpलौटाता है 200 OK.wp-admin/load-scripts.phpलौटाता है 200 OK.- एडमिन इंटरफ़ेस फिर से सामान्य दिख रहा है (CSS/JS लोड हो गए हैं)।
यदि आपने पहले कोई अस्थायी ओवरराइड जोड़ा था (उदाहरण के लिए एक wp-admin/.htaccess जो उन फ़ाइलों को बिना शर्त अनुमति देता था), तो सब कुछ सामान्य रूप से काम करने लगने पर आप उन्हें हटा सकते हैं।
वैकल्पिक: Wordfence फ़ाइलों की सफ़ाई
यदि आपने Wordfence का उपयोग पूरी तरह बंद कर दिया है, तो आप यह भी कर सकते हैं:
- हटाएँ या नाम बदलें:
wp-content/plugins/wordfence/wp-content/wflogs/(लॉग डायरेक्टरी)
- हटाएँ
wordfence-waf.phpअगर आपके document root से इसका संदर्भ अब कहीं नहीं है, तो इसे वहाँ से हटा दें।
भविष्य की समस्याओं से बचाव
- ध्यान रखें कि WAF / “Extended Protection” वाले सिक्योरिटी प्लगइन इन्हें बदल सकते हैं:
.htaccess.user.ini- ग्लोबल PHP व्यवहार, इसके माध्यम से
auto_prepend_file
- डैशबोर्ड से प्लगइन को निष्क्रिय करने पर भी आपकी इन निम्न-स्तरीय हुक्स को अपने आप हटा देते हैं।
- यदि आपको WordPress की मुख्य फ़ाइलों पर अजीब 403 त्रुटियाँ या “client denied by server configuration” संदेश दिखाई दे, जैसे
load-styles.php,load-scripts.php, याwp-cron.php, तो हमेशा इनकी जाँच करें:auto_prepend_fileमें मौजूद पंक्तियाँ.user.iniऔर.htaccess.- बची हुई WAF बूटस्ट्रैप फ़ाइलें, जैसे
wordfence-waf.php.
सारांश
समस्या: WordPress एडमिन काम नहीं कर रहा, load-styles.php / load-scripts.php प्लगइन बंद करने के बाद भी 403 त्रुटि आ रही है।
कारण: Wordfence WAF अब भी इसके माध्यम से लोड हो रहा है: auto_prepend_file में .htaccess / .user.ini, जो लोड करता है wordfence-waf.php हर रिक्वेस्ट पर और उन एंडपॉइंट्स को ब्लॉक कर देता है।
समाधान:
- Wordfence प्लगइन को बंद करें (यदि संभव हो)।
- हटाएँ
auto_prepend_fileइनके संदर्भwordfence-waf.phpसे.htaccessऔर.user.ini. - PHP / Apache को रीलोड करें और wp-admin को दोबारा जाँचें — इन पर आ रही 403 त्रुटियाँ
load-styles.php/load-scripts.phpअब नहीं आनी चाहिए।