2008-12-28 15 views
19

मैं जावा पृष्ठभूमि से आया हूं और किसी भी servlets- आधारित तकनीक के साथ, एक निर्दिष्ट सर्वलेट में यूआरएल की एक श्रृंखला (उदाहरण/रिपोर्ट/,/सुरक्षित/ .do) को मानचित्र करना मुश्किल है। अब मैं PHP से कम परिचित हूं लेकिन मैंने अभी तक कुछ भी नहीं देखा है जो PHP (या mod_php) के साथ एक ही चीज़ करता है। यह पूरी तरह से संभव है कि मुझे कुछ आसान याद आ रहा है।यूआरएल मैपिंग?

आप PHP में यह कैसे करते हैं?

मैं ऐसा करने के कारणों में से एक है "एक प्रयोग" यूआरएल। अब यह जीईटी पैरामीटर (जैसे एमडी 5 हैश टोकन) के साथ किया जा सकता है लेकिन मुझे कई समस्याओं के सामान्य समाधान के रूप में यूआरएल मैपिंग में दिलचस्पी है।

इस तरह कुछ उपयोग करने का एक और बड़ा कारण रीस्टफुल यूआरएल होना है।

उत्तर

2

PHP में ऐसा नहीं किया जा सकता है। ध्यान दें कि जावा में, यह Servlets या तो नक्शा यूआरएल नहीं है, लेकिन यह सर्वलेट कंटेनर (जैसे टोमकैट) की कॉन्फ़िगरेशन है।

आप URL rewriting.

2

यह कुछ ऐसा है mod_rewrite आम तौर पर के लिए इस्तेमाल किया जाएगा की तरह लगता है का उपयोग करके पीएचपी अनुप्रयोगों के लिए इसी तरह के परिणाम प्राप्त कर सकते हैं (अपाचे, नहीं पीएचपी के एक भाग के रूप में।) मैं PHP में कुछ भी नहीं सुना है जो यह पूरा करेगा।

13

अन्य , जैसा कि पहले से ही बताया गया है कि आप एक साधारण चाल के साथ जादू का थोड़ा सा कर सकते हैं।

अपनी पसंद का एक नियमित अभिव्यक्ति के साथ इस एक

<FilesMatch "^servlet$"> 
    ForceType application/x-httpd-php 
</FilesMatch> 

स्थानापन्न^सर्वलेट $ की तरह एक निर्देश .htaccess में रखो (यह अपने डिस्पैचर का नाम होगा)

फ़ाइल सर्वलेट चाहिए इस

<?php 
    $data = explode('/',$HTTP_SERVER_VARS['PATH_INFO']); // $data[0] always empty 
    $fileToInclude = $data[1].'.php'; 
    if (file_exists($data[1]) { 
    $params=array_slice($data,2); // you can do here something more sophisticated 
            // for example sanitize parameters or assemble 
            // an hash 
    include ($fileToInclude);  //Think to this file as a servlet 
    } else { 
    // issue a 404 error, maybe one of the 500 series 
    } 
?> 

यूआरएल के समान हो प्रपत्र हो सकता है: http://yoursite/servlet/reports/sales/2009 आप भी प्रपत्र तक पहुँच सकते हैं http://yoursite/reports/sales/2009 .htacces और प्रेषक के साथ थोड़ा सा plaiyng।

इस विधि का लाभ यह है कि mod_rewrite को FilesMatch (1.3+) और ForceType (2 के रूप में आवश्यक नहीं है।0+) अपाचे कोर में हैं

संदर्भ के लिए देखें
http://httpd.apache.org/docs/2.2/mod/core.html#forcetype
अपाचे के अलावा अन्य HTTP सर्वर के लिए http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
http://www.devarticles.com/c/a/Apache/Using-ForceType-For-Nicer-Page-URLs/1/

2

विकल्प:

आप Lighttpd उपयोग कर रहे हैं, तो उनके mod_rewrite मॉड्यूल एक पूरी तरह से अलग विन्यास वाक्यविन्यास है। विवरण के लिए http://redmine.lighttpd.net/wiki/1/Docs:ModRewrite देखें।

यदि आप आईआईएस का उपयोग कर रहे हैं, तो आपको ISAPI_Rewrite (http://www.isapirewrite.com/) या यूआरएल रिवाइट मॉड्यूल (http://learn.iis.net/page.aspx/460/using-url-rewrite-module/) की आवश्यकता है।

2

दूसरों के रूप में उल्लेख किया है कि आप यह करना mod_rewrite का उपयोग कर सकते लेकिन यह भी आप एक सामने नियंत्रक डिजाइन प्रतिरूप है जो वेब चौखटे के कई का उपयोग इस्तेमाल कर सकते हैं। Horde routes या Zend_Controller_Router_Rewrite पर एक नज़र डालें जिसका उपयोग एमवीसी,

12

एक चाल जो मैं उपयोग करता हूं वह $ _ SERVER ['PATH_INFO'] है (मुझे लगता है कि आपको अपाचे की आवश्यकता है)। PHP फ़ाइल एक्सटेंशन के बाद यह आपको सारी जानकारी प्राप्त करता है।

http://www.example.com/page.php/rest/url 

$ _ सर्वर [ 'PATH_INFO'] में शामिल होंगे:

"/rest/url" 

पेज तो अनुप्रेषित कर सकते हैं, इस प्रक्रिया को कुछ कोड या जो कुछ भी है कि स्ट्रिंग पर आधारित है।

आप अपाचे कॉन्फिग या .htaccess के लिए उपयोग नहीं है, तो यह अच्छा है, इसके अलावा, अगर आप चीजों को बदलना स्थिर फ़ाइल नियुक्ति के लिए एक निर्देशिका का नाम page.php बना सकते हैं। ओह और PHP को .php एक्सटेंशन रखने की आवश्यकता नहीं है। मैंने अतीत में .api या somesuch का उपयोग किया है।

http://www.example.com/worker.api/rest/url 

ऐसा लगता है कि मेरे लिए अच्छा काम करता है।

+0

यह रूप में अच्छी तरह Lighttpd में काम करता है। – neu242

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