यह संभव है, लेकिन आपको RewriteMap
का उपयोग करने की आवश्यकता है। एक मैपिंग को परिभाषित करने के लिए जिसे आप RewriteRule
. के भीतर उपयोग कर सकते हैं ।
अपाचे संस्करण 2.2 में प्रत्यक्ष डेटाबेस पहुंच नहीं है, इसलिए आपको एक स्क्रिप्ट लिखनी होगी जो वास्तविक क्वेरी करती है और फिर परिणाम लौटाती है। आप "External Rewriting Program" ।
इसलिए यदि आपके पास एक स्क्रिप्ट है जो स्टड से "बिल्लियाँ" लेती है, तो डेटाबेस से पूछताछ करती है, और "1" लौटाती है, आप इसे इस तरह परिभाषित करेंगे:
RewriteMap item_lookup prg:/path/to/item_lookup.php
वह निर्देश आपके सर्वर या vhost config में होना चाहिए, यह htaccess फ़ाइल में नहीं हो सकता है। लेकिन आप htaccess फ़ाइल में मैपिंग का उपयोग कर सकते हैं:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
तो यह यूआरआई लेता है /cats
और उसे /item.php?id=1
. पर फिर से लिखता है ।
यदि आप apache 2.4 का उपयोग कर रहे हैं, तो आप " का लाभ उठा सकते हैं। DBD" नक्शा . आप किसी बाहरी स्क्रिप्ट का उपयोग किए बिना क्वेरी को सीधे मानचित्र परिभाषा में सम्मिलित कर सकते हैं। आप इसे उसी तरह इस्तेमाल करेंगे।
RewriteMap item_lookup "fastdbd:SELECT id FROM items WHERE name = %s"
फिर इसे इसी तरह इस्तेमाल करें:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /item.php?id=${item_lookup:$1} [L]
DBD/FastDBD क्वेरी का उपयोग किए बिना, मुझे लगता है कि आप item.php
से डेटाबेस लुकअप करने से ईमानदारी से बेहतर हैं , चूंकि आप किसी भी तरह से उस सभी कार्य को दूसरी बाहरी स्क्रिप्ट में डुप्लिकेट कर रहे होंगे। बस कुछ इस तरह जोड़ें:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^item/([0-9]+)$ /item.php?id=$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)$ /item.php?name=$1 [L]
और आपके item.php
. में स्क्रिप्ट, दोनों id की जांच करें और नाम . अगर आपके पास नाम . है , एक आईडी में बदलने के लिए डेटाबेस लुकअप करें। इसे प्रबंधित करना बहुत आसान है, आपके पास सर्वर/vhost कॉन्फ़िग एक्सेस की आवश्यकता नहीं है, और आप फिर से लिखने वाले मानचित्र का उपयोग करके मामलों को जटिल नहीं बना रहे हैं।