2017-09-27 29 views
17

मैं एक कस्टम वर्डप्रेस मल्टीसाइट नेटवर्क के लिए वर्डप्रेस प्लगइन बनाने पर काम कर रहा हूं और कुछ फाइलें हैं जो यूआरएल चर का उपयोग दूसरे डेटाबेस (वर्डप्रेस डेटाबेस नहीं) से जानकारी लोड करने के लिए करती हैं।.htaccess वर्डप्रेस प्लगइन के साथ फिर से लिखना

http://website.com/NAME-HERE पर नेविगेट करके वर्डप्रेस के बाहर निर्मित संस्करण में यह देखने के लिए जांच करेगा कि यह मेरे डेटाबेस में उपयोगकर्ता नाम है या नहीं, यह देखने के लिए जांचें कि क्या यह मेरे डेटाबेस में एक समूह है और फ़ाइल को लोड करता है एक उपयोगकर्ता नाम या समूह।

अब मैं वर्डप्रेस मल्टीसाइट में इसे लागू करने के बारे में पूरी तरह खो गया हूं। जहां तक ​​मुझे पता है कि प्लगइन्स .htaccess फिर से लिख नहीं सकते हैं? मैं इसे सभी नेटवर्क साइटों पर कैसे काम करूं?

यदि यह पूरा करने का सबसे अच्छा तरीका नहीं है?

क्या मुझे अपना pretty.php & .htaccess मेरी रूट निर्देशिका में फिर से लिखने और प्लगइन में स्थित फ़ाइलों को इंगित करने की आवश्यकता है? यदि ऐसा है तो यह कई विषयों के साथ कैसे काम करता है?

अभी तक मेरा एकमात्र अन्य विचार शायद यह RewriteMap जैसे कुछ के साथ पूरा किया जा सकता है।

इस बिंदु पर मुझे लगा कि मेरी सर्वश्रेष्ठ शर्त सहायता या दिशा के लिए स्टैक ओवरफ्लो समुदाय तक पहुंचना था।

.htaccess

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

RewriteCond %{SCRIPT_FILENAME} !-d 
RewriteCond %{SCRIPT_FILENAME} !-f 

RewriteRule ^(\w.+)$ ./pretty.php?pretty=$1 [QSA] 

ErrorDocument 404 /404.php 

pretty.php

// First check if passed pretty parameter is a username. 
if(checkIfUserByUsername($_GET['pretty'])) 
{ 
    $_GET['username'] = $_GET['pretty']; 

    include("USERNAME.php"); 

// If not a username, check to see if it's an event. 
}else if(checkIfStreamByPretty($_GET['pretty'])){ 
    $_GET['id'] = getStreamIdFromPretty($_GET['pretty']); 

    include("GROUP.php"); 
}else{ 
    // If it's none, redirect to the 404 page. 

    include("404.php"); 
} 

मुझे लगता है मैं क्या हासिल करना, मैं पृष्ठ टेम्पलेट बनाने रहा हूँ की अधिक संदर्भ प्रदान करना चाहते हैं, जिनमें से एक फाइल प्रोफाइल के लिए है और इनमें से एक समूह के लिए है जैसा कि आपने मेरे .htaccess और pretty.php से ऊपर देखा है, फिर मैं पेज टेम्पलेट फ़ाइल के शीर्ष पर हूं, फिर

का उपयोग कर रहा हूं
$user_id = getIdFromUsername($_GET['username']); 
$_GET['user_id'] = $user_id; 

मैं वास्तव में इस तरह से इस तरह से जाने के तरीके के साथ संघर्ष कर रहा हूं कि यह कई विषयों के साथ काम करने की अनुमति देता है। बस इस बिंदु पर किसी भी तरह के समाधान की तलाश में।

+0

यह स्पष्ट नहीं है कि आप वांछित परिणाम के रूप में क्या हासिल करना चाहते हैं। आपके सामने आने वाले संघर्षों के विपरीत, आप वास्तव में क्या करना चाहते हैं, इसके लिए अधिक संक्षिप्त होने के लिए अपने प्रश्न को तोड़ दें। '.htaccess' पर संपादन के लिए आप अन्य प्लगइन चेकआउट कर सकते हैं जो '.htaccess' फ़ाइल में संपादन करते हैं, जैसे 'ऑल इन वन डब्ल्यूपी सिक्योरिटी एंड फ़ायरवॉल'। – fyrye

+0

अगर मैं example.com/Dustin पर जाता हूं तो यह जांचता है कि क्या इसका उपयोगकर्ता नाम या समूह है और यह पृष्ठ-टेम्पलेट फ़ाइल प्रदर्शित करता है जिसके लिए यह है। –

+0

लेकिन इसे मल्टीसाइट्स के लिए भी काम करने की ज़रूरत है, इसलिए example.com/SITE/Dustin –

उत्तर

5

यदि आप समझ रहे हैं कि आप क्या हासिल करना चाहते हैं, तो आप कुछ तरीकों से संपर्क कर सकते हैं। आपको किसी भी पुनर्लेखन का उपयोग करने की आवश्यकता नहीं है।

सबसे आसान समाधान आपके WordPress टेम्पलेट में अपने header.php फ़ाइल में अपना "pretty.php" कोड जोड़ना होगा। यह वेबसाइट के सामने के अंत तक हर अनुरोध पर लोड होगा। यदि आपको केवल एक विशिष्ट पृष्ठ पर कोड लोड करने की आवश्यकता है, तो बस is_page का उपयोग करके आप किस पृष्ठ पर हैं, इसकी जांच करें।

उदाहरण के लिए, अपने header.php में:

if(is_page("groups")){ 
    if(checkIfUserByUsername($_GET['pretty'])) 
    { 
    // the rest of your code 
    } 
} 

आप एक Wordpress प्लगइन लिखना चाहते हैं, तो आप सिर्फ अपने प्लगइन में "ADD_ACTION" का उपयोग करने की जरूरत है:

add_action('wp_head', 'function_containing_your_code'); 

फिर से, यह प्रत्येक पृष्ठ पर लोड होगा, इसलिए बस यह जांचें कि आप उस पृष्ठ पर हैं जिस पर आप अपना कोड लोड करना चाहते हैं।

https://codex.wordpress.org/Plugin_API/Action_Reference/wp_head https://developer.wordpress.org/reference/functions/is_page/

इसके अलावा, आप अपने .htaccess फ़ाइल को संपादित की तरह ही आप देखेंगे कि आपके प्रयोक्ता संपादन की अनुमति है किसी भी फाइल को संपादित कर सकते हैं कर सकते हैं। मान लें कि आप एक अपाचे सर्वर चला रहे हैं, आपकी .htaccess फ़ाइल में अनुमतियां हैं जो फ़ाइल को संपादित करने की अनुमति देती हैं और आप फ़ाइल को PHP के साथ संपादित कर सकते हैं। उदाहरण के लिए:

$file = fopen("/path/to/.htaccess", "a+"); 
fwrite($f, "RewriteRule ^(\w.+)$ ./pretty.php?pretty=$1 [QSA]"); 
fclose($f); 

बहुत से लोग कहते हैं कि यह अपनी .htaccess फाइल करने के लिए पीएचपी लेखन के लिए एक सुरक्षा जोखिम है। मैं कहूंगा कि कुछ परिस्थितियों में यह सच है, लेकिन निश्चित रूप से हमेशा नहीं। PHP को आपकी .htaccess फ़ाइल में लिखने की अनुमति देने से पहले अनुमतियों को समझें।

+0

वैसे भी हम स्काइप या कुछ से चैट कर सकते हैं? –

+0

मुझे .htaccess काम लिखने के लिए मिला है, लेकिन यह केवल मेरी मुख्य साइट पर लागू होता है न कि नेटवर्क की सभी साइटें। –

+0

यह वह दिशा थी जिसमें मैं भी जा रहा था। मैं कहूंगा कि वर्डप्रेस को '.htaccess' तक पहुंच पहुंचने और उत्पादन में परिवर्तन लागू करने की अनुमति खराब है। एक भी बुरा लेखन साइटों के पूरे नेटवर्क को नीचे लाएगा। सर्वर कॉन्फ़िगरेशन और तृतीय-पक्ष प्लगइन उपयोगों के आधार पर, '.htaccess' को संपादित करना वांछनीय नहीं हो सकता है। जैसे सर्वर-साइड और क्लाइंट-साइड कैशिंग, नए नियमों को लागू होने से रोकते हैं। ऐसा करने से प्रत्येक अनुरोध के लिए संसाधित होने वाले कई पुनर्लेखन नियमों के कारण प्रतिक्रिया भी कम हो सकती है। – fyrye

2

जॉन गिल के उत्तर के अलावा कृपया प्राप्त पैरामीटर को स्वच्छ करें। आप कुछ sanitizing विकल्प के here

अपने प्रश्नों में संदर्भ $username = sanitize_text_field($_GET['pretty']); जैसे कुछ होना चाहिए पर्याप्त के बारे में पढ़ सकते हैं। लेकिन कृपया स्वच्छता की आवश्यकता के बारे में गहराई से देखें।

अपने मूल प्रश्न के बारे में जॉन सुझाव दिया गया पहला दृष्टिकोण बेहतर प्रतीत होता है।

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

यदि आप इसे अतिरिक्त स्ट्रीम के साथ बाईपास करते हैं या जो भी आप डुप्लिकेट प्रविष्टियों के साथ समाप्त होने का जोखिम लेते हैं या किसी दूषित फ़ाइल को खराब करते हैं जो सर्वर त्रुटियों का कारण बन सकता है।

संपादित

I'am नहीं काफी यकीन है कि तुम क्या include('USERNAME.php') सहित आप प्रत्येक उपयोगकर्ता है कि आपके "बहु-साइट नेटवर्क" के लिए साइन अप के लिए एक समर्पित php फ़ाइल बना रहे साथ हासिल करने की कोशिश कर रहे हैं? यदि ऐसा है तो मुझे लगता है कि इस योजना के दौरान आपने गलत निर्णय किए हैं।

आमतौर पर जब आप बाहरी संसाधनों के आधार पर व्यवहार को साझा, नियंत्रित या परिवर्तित करना चाहते हैं तो आप JSON डेटा प्रारूप में डेटा प्राप्त करेंगे।

अब अगर मैं अपने जूते में थे मैं एक REST वेब सेवा JSON उपयोगकर्ता नाम के आधार पर पैरामीटर हो और डेटा में आ रहा है पर निर्भर करता है उत्पादन को नियंत्रित रिटर्न बनाएंगे।

एक एपीआई बनाना कुछ जटिल है और आपकी ज़रूरतों के आधार पर आप जो भी उपकरण इन सर्वोत्तम फिट बैठते हैं, उसके साथ जाते हैं। मुझे व्यक्तिगत चीजों के लिए apigility और छोटी चीजों के लिए lumen के साथ व्यक्तिगत रूप से काम करना अच्छा लगा। यदि आप भी चुनते हैं तो आप इसे स्वयं भी बना सकते हैं।

एपीआई बनाने के बाद आप file_get_contents() के साथ JSON आसानी से here वर्णित कर सकते हैं या PHP के लिए जो भी शेष टूल ढूंढ सकते हैं उसका उपयोग कर सकते हैं।

+1

ठीक है अगर मैं रिवाइट नियम का उपयोग कर रहा हूं RewriteRule^(\ w। +) $ ./pretty.php?pretty=$1 [QSA] मैं इसे सभी मल्टीसाइट साइटों के लिए केवल मुख्य साइट पर कैसे काम करूं? –

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