वर्डप्रेस कैसे यूआरएल बनाता है जिसके बारे में अपाचे को पता है?


17

जब आप वर्डप्रेस में एक पेज बनाते हैं, तो यह डेटाबेस तालिका में सिर्फ एक प्रविष्टि है; उस स्थान पर कोई वास्तविक फ़ाइल नहीं है। हालाँकि मैं स्वयं उस स्थान पर एक फ़ाइल बना सकता हूँ और यह पृष्ठ को वर्डप्रेस से चुरा लेगा। मैं फ़ाइल को हटा देता हूं और यह मूल रूप से वर्डप्रेस पेज पर वापस चला जाता है।

मैं इस बारे में उत्सुक हूं कि यह कैसे हासिल किया जाता है। संभवतः वर्डप्रेस और अपाचे (?) के बीच कुछ संचार हो रहा है।

जवाबों:


27

वास्तव में अपाचे और वर्डप्रेस के बीच कोई संचार नहीं हो रहा है। "जादू" अपाचे mod_rewriteनियमों में हो रहा है।

एक मानक वर्डप्रेस इंस्टॉलेशन के लिए, आपके पास निम्नलिखित नियम हैं .htaccess:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

इस पंक्ति पर ध्यान दें: RewriteRule . /index.php [L] यहां, हम अपाचे को किसी भी URL अनुरोध को आंतरिक रूप से पुनर्निर्देशित करने के लिए कह रहे हैं /index.php

जब तक: यह रेखा:RewriteCond %{REQUEST_FILENAME} !-fझूठी नहीं हो जाती। इसका मतलब है किRewriteCondऊपर के साथइसे जोड़ने केसाथRewriteRule, हम अपाचे को सभी अनुरोधों को भेजने के लिए कह रहे हैं/index.php, लेकिन अगर यह एक मौजूदा फ़ाइल नहीं है

इसके अलावा, जब यह रेखा:RewriteCond %{REQUEST_FILENAME} !-dझूठी हो जाती है। इसका मतलब है किRewriteCondउपरोक्त के साथइसे जोड़ने केसाथRewriteRule, हम अपाचे को सभी अनुरोध भेजने के लिए कह रहे हैं/index.php, लेकिन यह नहीं कि यह एक मौजूदा निर्देशिका है

इसलिए अंत में, जब तक यह एक मौजूदा फ़ाइल या मौजूदा निर्देशिका नहीं है, अपाचे आंतरिक रूप से अन्य सभी अनुरोधों को भेज रहा है /index.php

तो जैसा कि आप देख रहे हैं, अपाचे और वर्डप्रेस के बीच कोई संचार नहीं हो रहा है। अपाचे सब कुछ खुद तय कर रहा है और हम इसे ऐसा करने RewriteRuleऔर RewriteCondनिर्देशों का उपयोग करने के लिए कह रहे हैं ।

के बारे में और अधिक पढ़ें mod_rewriteयहाँ


3
यह भी खूब रही। मैं ठीक से समझता हूं। मैंने कई बार डिफ़ॉल्ट .htaccess फ़ाइल देखी है और कभी भी इसका विश्लेषण करने की जहमत नहीं उठाई। धन्यवाद!
मैट

यह एक डिज़ाइन पैटर्न है जिसे फ्रंट कंट्रोलर कहा जाता है। ध्यान दें कि यह सभी गैर-मौजूदा url को index.php पर पुनर्निर्देशित करता है, इसका मतलब है कि यदि आप अपने फ़ंक्शंस के लिए पूर्ण पथ टाइप करते हैं। फ़ाइल, frontcontroller काम नहीं करेगा और वेबसाइट functions.php की सेवा करेगी। यही कारण है कि आप अक्सर वर्डप्रेस प्लगइन और थीम फ़ाइलों के साथ शुरू होते देखेंगेif ( !defined(‘ABSPATH’)) exit;
Sjors Ottjes

हां मैंने देखा है कि प्लगइन्स में लेकिन इसके उद्देश्य को नहीं समझा। इसलिए, यदि !defined(‘ABSPATH’)सत्य का मूल्यांकन करें, तो इसका मतलब है कि वर्डप्रेस के अलावा कुछ और स्क्रिप्ट का उपयोग करने की कोशिश कर रहा है (क्योंकि ABSPATH को wp-config.php में परिभाषित किया गया है), और इसलिए इसे उस अनुरोध को अनदेखा करना चाहिए। क्या वो सही है?
मैट

@ मट सही है। हालांकि मैं यह नहीं कहूंगा कि "वर्डप्रेस के अलावा कुछ और"। क्योंकि आप ABSPATHकिसी भी अन्य PHP स्क्रिप्ट में भी परिभाषित कर सकते हैं , इसलिए यह आपके स्वयं के सर्वर पर अन्य स्क्रिप्ट की अनुमति देगा। यह जो अनुमति नहीं देगा वह आपके सर्वर के बाहर से उस फ़ाइल की सीधी पहुंच है (ब्राउज़र से कहें)। क्योंकि उस फ़ाइल को सीधे एक्सेस करके, उपयोगकर्ता किसी भी तरह से परिभाषित करने में सक्षम नहीं हैं ABSPATH
फ़ैयाज़

यह जानना वास्तव में बहुत अच्छा है। मुझे लगातार सुरक्षा की चिंता है और मैं तुरंत इसका लाभ उठा पाऊंगा। धन्यवाद!
मैट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.