2013-02-12 25 views
5

रीडायरेक्ट कैसे करें I mod_rewrite का उपयोग करके PHP में थोड़ा आराम एपीआई लिखने का प्रयास कर रहा हूं।mod_rewrite: HTTP DELETE और PUT

मेरा प्रश्न है: मैं HTTP DELETE और PUT को कैसे प्रबंधित करूं? उदाहरण के लिए, यूआरएल होगा: /पुस्तक/1234

जहां 1234 पुस्तक की अनूठी आईडी है। मैं इस आईडी (1234) को book.php पर पैरामीटर के रूप में आईडी के साथ "रीडायरेक्ट" करना चाहता हूं। मुझे पहले से ही पता है कि php स्क्रिप्ट में PUT और DELETE चर को कैसे पढ़ा जाए, लेकिन मैं mod_rewrite में यह पुनः लिखने के नियम कैसे सेट करूं?

कोई विचार?

संपादित करें: किसी GET के लिए पुनर्लेखन नियम इस प्रकार दिखाई देगा:

RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

मैं PUT के लिए इस "पैरामीटर अग्रेषण" क्या करते हो कैसे और हटाना चाहते हैं? जहां तक ​​मुझे HTTP पोस्ट पता है, PUT और हटाएं पैरामीटर मानों को प्रेषित करने के लिए HTTP अनुरोध निकाय का उपयोग करें। तो मुझे लगता है कि मुझे HTTP अनुरोध निकाय में पैरामीटर जोड़ना होगा। लेकिन मुझे नहीं पता कि mod_rewrite के साथ ऐसा कैसे करें।

क्या मैं कुछ प्रकार का मिश्रण हटा सकता हूं और प्राप्त कर सकता हूं?

RewriteCond %{REQUEST_METHOD} =DELETE 
RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

फिर book.php में मैं उपयोगकर्ता $ _GET [ 'आईडी'] पुस्तक आईडी पुनः प्राप्त करने के हैं, भले ही HTTP हेडर कहते HTTP पद्धति को हटाना है। यह काम नहीं लगता है ...

+2

आप 'स्क्रिप्ट PUT ...' या रीव्राइटकंड का उपयोग '% {REQUEST_METHOD}' – mario

उत्तर

3

मैं हटाएँ और प्राप्त मिश्रण किसी तरह का कर सकता हूँ?

हां। आपको अपने रीराइट नियमों में अनुरोध विधि या PUT बॉडी के बारे में चिंता करने की आवश्यकता नहीं है।

अपने उदाहरण के लिए इसका मतलब है:

mod_rewrite

RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

HTTP अनुरोध

PUT /book/1234 
=> PUT /book.php?id=1234 

PHP स्क्रिप्ट

$id = intval($_GET['id']); 
if ($_SERVER['REQUEST_METHOD'] === 'PUT') { 
    // yes, it is. go on as usual 
} 

आगे स्पष्टीकरण के लिए: जीईटी पैरामीटर और पुट/पोस्ट/डिलीट पैरामीटर के बीच का अंतर यह है कि पूर्व यूआरएल का हिस्सा हैं, अनुरोध निकाय के बाद का हिस्सा। mod_rewriteकेवल यूआरएल बदलता है और शरीर को छूता नहीं है।

+0

बहुत बहुत धन्यवाद! – sockeqwe

5

RewriteCond निर्देश उपलब्ध है। आप इसका उपयोग यह निर्दिष्ट करने के लिए कर सकते हैं कि निम्न नियम केवल एक निश्चित स्थिति के तहत मान्य हैं। इस तरह यह प्रयोग करें यदि आप द्वारा HTTP अनुरोध mthod पुनर्लेखन करना चाहते हैं:

RewriteCond %{REQUEST_METHOD} =PUT 
RewriteRule ^something\/([0-9]+)$ put.php?id=$1 

RewriteCond %{REQUEST_METHOD} =DELETE 
RewriteRule ^something\/([0-9]+)$ delete.php?id=$1 

# ... 
+0

हाँ पर कर सकते हैं, लेकिन मैं php स्क्रिप्ट के लिए PUT पैरामीटर के रूप में आईडी (यूआरएल से पुनर्प्राप्त) कैसे पास करूं:/कुछ/1234 मुझे यह चाहिए कि कुछ। Php आईडी = "123" किसी भी तरह से पुनर्प्राप्त कर सकता है।एक HTTP प्राप्त करने के लिए मैं ऐसा कुछ करता हूं: कुछ लिखना/([0-9] +) something.php? Id = $ 1 [QSA]। मैं PUT और DELETE के लिए यह पैरामीटर अग्रेषण कैसे करूं? जहां तक ​​मुझे पता है मुझे HTTP अनुरोध निकाय में एक var जोड़ने की जरूरत है। लेकिन मुझे नहीं पता कि mod_rewrite – sockeqwe

+0

के साथ ऐसा करने के लिए कैसे कोई अन्य पुनर्लेख नियम -> regexes का उपयोग करना है। आप ट्यूटोरियल के एक टन का पालन कर सकते हैं। या मेरे अपडेट – hek2mgl

+0

की जांच करें बहुत बहुत धन्यवाद! – sockeqwe

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