2010-05-28 12 views
6

मैंने देखा है कि कुछ साइटों (पुराने http://careers.stackoverflow.com 1.0 सहित) क्वेरी स्ट्रिंग है कि इस तरह लग रहे है:/123 और/123 के बीच क्या अंतर है?

http://somewebapp.example/123 या http://somewebapp.example/id/123

क्या हैं:

http://somewebapp.example/?123

की तुलना में दूसरे और तीसरे उदाहरणों के बजाय पहले उदाहरण का उपयोग कर डेवलपर्स अपने वेब ऐप्स के यूआरएल को लागू करने का कारण चुनते हैं?

और बोनस के रूप में, PHP में पहला उदाहरण कैसे लागू करेगा, 123 डेटाबेस तालिका में कुछ पंक्ति की प्राथमिक कुंजी है? (मैं सिर्फ पता है कि कैसे URL से 123 पुनः प्राप्त करने की जरूरत है, मैं पहले से ही पता है कि 123 के एक प्राथमिक कुंजी के लिए डेटाबेस क्वेरी करने के लिए।)

संपादित करें [5/28]: ओह, हर किसी को यह बताने के लिए भूल गया कि मुझे पता है कि बाद के दो यूआरएल क्या हैं, वे कैसे काम करते हैं और उन्हें कैसे कार्यान्वित करते हैं। हालांकि अनुस्मारक के लिए धन्यवाद, मुझे लगता है कि मेरे पास कुछ असंबंधित गलत धारणाएं थीं जिन्हें किसी भी तरह से स्पष्ट रूप से स्पष्ट किया गया था!

उत्तर

9

पहला लागू करना आसान है; सब कुछ के बाद? क्वेरी स्ट्रिंग का हिस्सा है। वेब सर्वर से पहले निर्दिष्ट पृष्ठ लोड करता है? और क्वेरी स्ट्रिंग को अलग से संभालता है (PHP में यह $_GET के माध्यम से सुलभ है)

दूसरे उदाहरण में डेवलपर को सभी अनुरोधों को किसी विशेष पृष्ठ पर रीडायरेक्ट करने के लिए वेब सर्वर सेट अप करने की आवश्यकता है है, जो तब यह पता लगाने की क्या

अनुरोध किया गया था अपने पिछले प्रश्न के रूप में यूआरएल को पार्स होगा (के बाद से वहाँ सर्वर पर कोई /123 पेज है), 123 अप $_GET में एक महत्वपूर्ण के रूप में दिखाई देगा, इसलिए key($_GET) संभालने काम करेगा क्वेरी स्ट्रिंग

+0

धन्यवाद! दोनों सवालों के जवाब देने के लिए स्वीकृत। यह नहीं पता था कि कुंजी को पकड़ना इतना आसान था – BoltClock

0

पहला उदाहरण एक क्वेरी स्ट्रिंग है; दूसरे और तीसरे उदाहरण नहीं हैं। What Every Developer Should Know About URLs से यूआरएल के बारे में और जानें। क्वेरी स्ट्रिंग से आईडी का उपयोग करने के लिए, आपको उचित लाइब्रेरी का उपयोग करके इसे पार्स करना होगा।

0
में यह एकमात्र चीज है जिसे आप पास कर रहे हैं

डेवलपर्स दूसरे और तीसरे उदाहरणों के बजाय पहले उदाहरण का उपयोग करके अपने वेब ऐप्स के URL को लागू करने का क्या कारण हैं?

सौंदर्यशास्त्र। यूआरआई को डिजाइन करने के तरीके पर कुछ अच्छी सलाह लेने के लिए cool URIs पढ़ें।

कैसे एक PHP

में पहला उदाहरण लागू करेगा

आप $_SERVER['PATH_INFO'] लिए देख रहे हैं, लेकिन सावधान रहना: कुछ होस्टिंग प्रदाताओं वहाँ में फर्जी सामान रख दिया।

उन परिस्थितियों में, आपको mod_rewrite या इसी तरह का उपयोग करने की आवश्यकता होगी ..

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(\d+) /index.php?id=$1 [L,QSA] 

इस तरह, आप $_GET['id']

+0

क्या यह पूरी तरह से उन सामान्य 'PATH_INFO' यूआरएल से बाहर खड़ा है जो आजकल इतने आम हैं? – BoltClock

0

से बाहर आईडी प्राप्त कर सकते हैं यह वास्तव में modRewrite नियम या अपाचे विन्यास के साथ क्या करना है। कोड इग्निटर जैसे कुछ ढांचे इन मार्गों का उपयोग आपको उस पृष्ठ पर निर्देशित करने के लिए करते हैं जो वास्तव में उस भौतिक स्थान पर तकनीकी रूप से मौजूद नहीं है। इसे पार्स किया गया है और ढांचा निर्धारित करता है कि कौन सा दृश्य प्रदर्शित करने के लिए अनुमोदित है। कुछ नियम वेब सर्वर को यह निर्धारित करने के लिए कि पैरामीटर से वैध मार्ग उपलब्ध है या नहीं, पैरामीटर के बाद कुछ भी पास करने की अनुमति देता है। कुछ सिस्टम स्वचालित रूप से ऐसा नहीं करते हैं और इसलिए

यदि आप पहले उदाहरण से 123 प्राप्त करना चाहते हैं तो आपको अनुरोध क्वेरी खींचने की आवश्यकता है query_string

1

का उपयोग कर पहली URL क्वेरी पैरामीटर उपयोग कर रहा है डेटा भेजने के लिए php से पहुंच सकते हैं। बाद में REST यूआरएल का एक रूप है जो वास्तव में ID 123

0

के साथ संसाधन को इंगित कर रहा है यदि आप अपाचे का उपयोग कर रहे हैं (और आप अन्य सर्वरों पर भी ऐसा कर सकते हैं, लेकिन मुझे विवरण नहीं पता), कुछ साथ बजाय एक page not found त्रुटि लोड index.php दे रही है, का अनुरोध किया गया पृष्ठ एक फ़ाइल !-f या एक निर्देशिका !-d तो नहीं है, तो और में है कि स्क्रिप्ट पर अनुरोध किया पथ पारित:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)$ index.php/$1 
</IfModule> 

नियम: इन पंक्तियों के एक दिलचस्प चाल करना होगा $_SERVER['PATH_INFO'] का रूप (इसे $_SERVER['REQUEST_URI'] से भी निकाला जा सकता है।

या आप अपाचे को index.php?$1 पर फिर से लिखने के लिए कह सकते हैं, इस स्थिति में पथ $_SERVER['QUERY_STRING'] से निकाला जा सकता है। (उस स्थिति में, आपको QSA तर्क का उपयोग मौजूदा क्वेरी स्ट्रिंग (यदि कोई हो) को गड़बड़ किए बिना जोड़ना चाहिए।