2016-02-12 6 views
5

मैं एक वर्डप्रेस प्लगइन लिख रहा हूं जो कक्षा एपीआई से सेटिंग्स एपीआई का उपयोग करता है।वर्डप्रेस मल्टीसाइट, कस्टम डब्ल्यूपी-कंटेंट फ़ोल्डर, और अनुरोध 10 आंतरिक रीडायरेक्ट्स की सीमा से अधिक है

AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace. 
: तो वर्ग register_settings(), add_settings_field(), और add_settings_section() वर्ग जो जब मैं प्रपत्र प्रस्तुत करने के लिए एक अपने लॉग में निम्न त्रुटि के साथ एक सर्वर त्रुटि मिलती कोशिश को छोड़कर अच्छी तरह से काम कर रहा है के भीतर से कॉल

मेरा वर्डप्रेस इंस्टॉल थोड़ा अजीब है। यह Mark Jaquith's WordPress Skeleton repo पर आधारित है और मैंने वर्डप्रेस के बाहर मेरी wp-content फ़ोल्डर, मेरी wp-config.php फ़ाइल को स्थानांतरित कर दिया है।

मैं भी वग्रेंट के माध्यम से वर्डप्रेस चला रहा हूं, इसलिए यह एक सर्वर कॉन्फ़िगरेशन समस्या हो सकती है। हालांकि, मैंने बस एक मानक वर्डप्रेस इंस्टॉल का उपयोग करके वीवीवी में अपनी प्लगइन का उपयोग करने की कोशिश की और यह पूरी तरह से काम कर रहा है।

मेरे वर्डप्रेस निर्देशिका इस तरह दिखता है (संगीतकार एप्लिकेशन निर्देशिका के लिए WP स्थापित):

index.php 
wp-config.php 
wp-content/ 
app/ 

मैं एक पेस्ट बिन में मेरी पुनर्लेखन लॉग जोड़ लिया है: http://pastebin.com/QKCFjULZ

मेरे .htaccess फाइल इस तरह दिखता है :

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule . - [L] 


RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] 

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) /app/$2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ /app/$2 [L] 


RewriteRule . /index.php [L] 

Options -indexes 
</IfModule> 
# END WordPress 
+0

मैं वर्ग के साथ एक मुद्दा नहीं किया जा रहा करने के लिए इसे नीचे संकुचित कर दिया है करने के लिए /app/file.php धन्यवाद करने के लिए फिर से लिखा कर दिया जाएगा। मैंने कक्षा के बाहर सभी सेटिंग्स एपीआई कार्यों को स्थानांतरित कर दिया और उन्हें मानक तरीके से लोड किया। – rugbert

उत्तर

1

आप क्योंकि इन नियमों का एक पुनर्निर्देशन लूप है

RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) /app/$2 [L] 
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ /app/$2 [L] 

असल में, आपको यह ध्यान रखना होगा कि आपके नियमों का पुनर्मूल्यांकन के बाद भी मूल्यांकन किया जाता है। इस प्रकार, यदि आपके पास /something/wp-xxx/yyy/zzz है तो इसे आंतरिक रूप से /app/wp-xxx/yyy/zzz पर लिखा जाएगा। लेकिन अब, जैसा कि आप देख सकते हैं, आपका नियम फिर से यूरी /app/wp-xxx/yyy/zzz के साथ मिल जाएगा।

सबूत, आपके लॉग को देख

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'wp-admin/network/options.php', 
rewrite 'wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

तो फिर तुम

applying pattern '^([_0-9a-zA-Z-]+/)?(wp-.*)' to uri 'app/wp-admin/network/options.php', 
rewrite 'app/wp-admin/network/options.php' -> '/app/wp-admin/network/options.php', 

है और इस पर और पर चला जाता है ... 10 पुनर्निर्देशन

इस व्यवहार से बचने के लिए की सीमा तक , आपको यह सुनिश्चित करने के लिए अपने नियमों पर कुछ प्रतिबंध जोड़ने की आवश्यकता है कि उन्हें मूल्यांकन नहीं किया जाएगा जब उन्हें मूल्यांकन नहीं किया जाएगा। एक साधारण वैकल्पिक हल यह पुनर्लेखन से पहले एक नकारात्मक अग्रदर्शी पैटर्न का उपयोग करने के लिए नहीं/app/ के साथ शुरू होता है यकीन है कि वर्तमान अनुरोध बनाने के लिए होगा:

RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L] 

अंत में, अपने htaccess इस

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} -f [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule^- [L] 

# Rule 1 
RewriteRule ^([^/]+/)?files/(.+)$ wp-includes/ms-files.php?file=$2 [L] 

# Rule 2 
RewriteRule ^((?!app/)[^/]+/)?(wp-.+)$ /app/$2 [L,QSA] 

# Rule 3 
RewriteRule ^((?!app/)[^/]+/)?(.+\.php)$ /app/$2 [L,QSA] 

RewriteRule^index.php [L] 

Options -Indexes 
</IfModule> 
# END WordPress 

अनुस्मारक दिखाई दे सकता है : 3 नियम केवल गैर-मौजूदा फ़ाइलों/फ़ोल्डरों पर निष्पादित किए जाते हैं।

उदाहरण:

  • http://domain.tld/files/something या http://domain.tld/xxx/files/something आंतरिक नियम 1
  • http://domain.tld/wp-something/somethingelse या http://domain.tld/xxx/wp-something/somethingelse (जहां xxxapp को छोड़कर कुछ भी हो सकता) आंतरिक रूप /app/wp-something/somethingelse फिर से लिखा जाएगा /wp-includes/ms-files.php?file=something करने के लिए धन्यवाद फिर से लिखा हो जाएगा नियम 2
  • के लिए धन्यवाद
  • http://domain.tld/file.php या http://domain.tld/xxx/file.php (जहां xxxapp को छोड़कर कुछ भी हो सकता) आंतरिक रूप नियम 3
+0

इसके लिए धन्यवाद, क्षमा करें, मुझे जवाब याद आया। तो आपके द्वारा जोड़े गए नियमों ने रिकर्सन त्रुटि को हल नहीं किया है। मैंने नोटिस किया कि ब्राउजर में यूआरएल कभी भी शामिल नहीं होता है/एप ताकि सिर्फ अपने ज्ञान के लिए रिवाइटकंड का क्या अर्थ है? यदि% {THE_REQUEST} में वह पैटर्न है, तो/ऐप के साथ प्रतिस्थापित करें? – rugbert

+0

फिर से अपना प्रश्न वापस पढ़ना, मैंने कुछ जवाब देखा और मेरे जवाब में कोड संशोधित किया। कृपया नीचे ध्यान से उदाहरण पढ़ें और मुझे बताएं कि क्या यह आपके द्वारा अपेक्षित व्यवहार से मेल खाता है। वैसे भी, कोई फर्क नहीं पड़ता कि, आपको ** कोड नहीं होना चाहिए ** इस कोड के साथ अब loops है –

+1

धन्यवाद! मेरी कोई रिकर्सन त्रुटियां नहीं हैं, और साइट बहुत तेज़ है। – rugbert

संबंधित मुद्दे