2010-04-22 9 views
5

में गतिशील यूआरएल चालू करने के लिए मैं PHP और अपाचे का उपयोग कर एक वेबसाइट के विकास कर रहा हूँ। मैं सेकैसे स्थिर यूआरएल

www.example.com/book.php?book=title

मेरी URL को एक करना चाहते हैं कुछ इस तरह में, अगर यह निश्चित रूप से संभव है:

www.example .com/book/title

ध्यान दें कि पुस्तकों का शीर्षक अद्वितीय है और दोहराया नहीं जा सकता है।

मैंने इस बारे में पढ़ा है, लेकिन मेरे जैसे शुरुआती लोगों के लिए कोई भी पोस्ट पर्याप्त स्पष्ट नहीं था। क्या आप लोग किसी भी ट्यूटोरियल को जानते हैं जो बताता है?

धन्यवाद।

उत्तर

0

Rodolphe के @ और @ गैलेन के उत्तर एक छोटा सा पर विस्तार।

यदि यूआरएल पुनर्लेखन की आपकी आवश्यकताएं सीमित हैं, तो हार्डडोडेड .htaccess रॉडॉल्फ़ के उदाहरण में वर्णित नियमों के साथ अच्छी तरह से किया जाएगा।

हालांकि, जैसा कि गैलन सुझाव देता है, आपकी ज़रूरतें अज्ञात हो सकती हैं, या आप उन्हें फिर से लिखने के बाद, अपने पुनर्लेखन नियमों को छूने की आवश्यकता के बिना उन पर विस्तार करना चाह सकते हैं।

ऐसा करने का एक आम तरीका है, अपने एप्लिकेशन को एक यूआरएल योजना के आसपास डिजाइन करना है जो www.host.com/controller/action/parameter है। ऐसे यूआरएल का एक उदाहरण www.host.com/book/view/1 हो सकता है, जिसे आंतरिक रूप से कई तरीकों से संभाला जा सकता है।

1)

आप हर नियंत्रक के लिए अलग स्क्रिप्ट हैं। फिर आप प्रत्येक अनुरोध को $controller.php?action=$action&param=$param पर फिर से लिखते हैं, जो गैर-मिलान या गैर-मान्य अनुरोधों को डिफ़ॉल्ट नियंत्रक को पुनर्निर्देशित करता है।

# Serve files and directories as per usual, 
RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 

# If the request uri doesn't end in .php 
# and isn't empty, rewrite the url 
RewriteCond %{REQUEST_URI} !.php$ 
RewriteCond %{REQUEST_URI} !^$ 
# Try matching against a param request first 
RewriteRule (.*?)/(.*?)/(.*?) $1.php?action=$2&param=$3 [L] 
# If it didn't match, try to match an action 
RewriteRule (.*?)/(.*?) $1.php?action=$2 [L] 

# redirect all other requests to index.php, 
# your default controller 
RewriteRule .* index.php [L] 

2)

आप एक एकल प्रवेश बिंदु (या एक सामने नियंत्रक), जो आप हर अनुरोध को रीडायरेक्ट करने, और इस मोर्चे नियंत्रक उचित नियंत्रक से अनुरोध पुनः निर्देशित संभालती है।

# Redirect all requests that isn't a file or 
# directory to your front controller 
RewriteCond %{REQUEST_URI} !-f 
RewriteCond %{REQUEST_URI} !-d 
RewriteRule .* index.php [L] 

जेनेरिक फ़ॉलबैक नियम किसी भी पैरामीट को डिफ़ॉल्ट/फ्रंट नियंत्रक में शामिल नहीं करेंगे। हालांकि, चूंकि यह एक आंतरिक रीडायरेक्ट है, इसलिए आपको यह निर्धारित करने के लिए PHP में REQUEST_URI तक पहुंच होगी कि आपको क्या करना चाहिए।

ये स्वाभाविक रूप से, आपके एकमात्र विकल्प नहीं हैं। थोड़ी अधिक हलचल के लिए सूप में बस मेरे 2 सेंट।

अस्वीकरण: उपर्युक्त सभी पुनर्लेख नियम (साथ ही साथ बाकी सब कुछ) मेरे सिर के शीर्ष (कुछ बीयर के बाद) से सीधे लिखा गया है और कहीं भी परीक्षण नहीं किया गया है।

2

सुविधा आप देख रहे हैं कहा जाता है 'यूआरएल को फिर से लिखने "

आप इसे मैन्युअल रूप से कर सकते हैं:। आप रेगुलर एक्सप्रेशन के उपयोग पैटर्न की व्याख्या, और वेब सर्वर अनुरोध अपाचे के साथ यह आमतौर पर नीचे पाया है अनुवाद करता है। । htaccess फ़ाइलें, या httpd.conf में directyl आधिकारिक दस्तावेज़ नहीं देख यहाँ:। http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

यह नहीं "है कि" सेटअप करने के लिए आसान है, हालांकि, नियमित अभिव्यक्ति विशेष रूप से डिबगिंग है

आपकी समस्या के बारे में, जैसा कोई नियम प्रयास करें। यह:

RewriteEngine on 
RewriteRule ^book/(.*)$ book.php?book=$1 [L] 

एक और विकल्प, एक PHP ढांचे का उपयोग करना होगा: अधिकांश समय, यह सुविधा अंतर्निहित है। ढांचे का उपयोग करने के लिए आपको "सीखना" है। अपनी वेबसाइट पहले से ही समाप्त हो गया है, तो यह सबसे अच्छा विकल्प नहीं है ...

2

यहाँ जिस तरह से kohana (और php चौखटे के 99.99%) करता है यह

.htaccess फ़ाइल जोड़े है (अपाचे का उपयोग करके)

# Turn on URL rewriting 
RewriteEngine On 

RewriteBase/

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/URL 
RewriteRule .* index.php/$0 [PT,L] 

यह index.php करने के लिए सभी यूआरएल पुनर्निर्देश।

स्थानीय होस्ट/पुस्तक/शीर्षक

index.php लोड किया जा जाएगा: index.php कि यूआरएल

अपने उदाहरण में

तो के आधार पर स्क्रिप्ट को लोड करता है सामने नियंत्रक किसी प्रकार का हो जाएगा। यह यूआरएल में जाएगा और लोड करने के लिए पेज (नियंत्रक) प्राप्त करेगा जो वास्तव में सभी काम करेगा। इस मामले में शायद books.php। books.php को यूआरएल से पुस्तक का शीर्षक मिलेगा और उसके बाद डेटाबेस खोजें या उस नाम के साथ जो भी हो, उसे करें।

0

अधिकांश समाधान mod_rewrite पर भरोसा करते हैं। उदाहरण के लिए See here

3

मैंने अपने वेब पेज में "http://www.example.com/casestudy/34" जैसे स्थिर प्रारूप में एक आंतरिक लिंक बनाया है।

और मैं .htaccess फाइल में लिखी गई जानकारी निम्नलिखित कोड:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^casestudy/([^-]+) /casestudy_details.php?id=$1 [R=301,QSA,L] 
संबंधित मुद्दे