2011-08-17 11 views
5

मैं बस इन कड़ियों चालू करने के लिए एक आधुनिक पुनर्लेखन बनाने के लिए कोशिश कर रहा हूँ:सरल मॉड पुनर्लेखन

/index.php?page=home 
/?page=home 

में
/home 

किसी ने मुझे दिखा सकते हैं कि यह कैसे किया जाता है? जबकि हम इस विषय पर हैं, क्या मॉड रीराइट पर पढ़ने के लिए कोई अच्छा संसाधन है? अब तक मेरा सबसे बड़ा संघर्ष यह है कि मुझे इसे डिबग करने का कोई तरीका नहीं दिखता है; चीजें या तो काम करती हैं या वे नहीं करते हैं।

उत्तर

6

ऐसा करने के कई तरीके हैं। यह एक किसी भी न के बराबर फाइल करने के लिए नियम लागू होता है:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

संपादित करें: आप शीर्ष पर RewriteEngine on जोड़ने के लिए हो सकता है, और यह अपने वेब दस्तावेज़ जड़ में .htaccess में चला जाता है। यह सब, ज़ाहिर है, इस पर निर्भर करता है कि आपके वेब होस्ट द्वारा htaccess (mod_rewrite) का उपयोग करने की अनुमति है और क्या नियम ओवरराइड फ़ाइल का नाम होना चाहिए। Htaccess। हालांकि दोनों बहुत आम हैं, इसलिए यह कोई समस्या नहीं होनी चाहिए।

+0

धन्यवाद, यह वास्तव में मुझे जरूरी है, आपका क्या मतलब है "किसी भी मौजूद फाइल पर नियम लागू होता है" हालांकि? –

+0

ज़रूर! 'रीवाइट्रूल' लाइन केवल तभी लागू होती है जब अनुरोध फाइल सिस्टम (लाइन 1) या फाइल सिस्टम (लाइन 2) पर एक निर्देशिका से मेल नहीं खाता है। दूसरे शब्दों में, यह अभी भी आपको किसी भी फाइल की सेवा करने देता है जो वास्तव में मौजूद है और index.php –

+0

पर सबकुछ पास करता है ओह कूल, बहुत बहुत धन्यवाद। –

4

यदि मैं समझता हूं, तो आप चाहते हैं कि आपके अंतिम उपयोगकर्ता example.com/home दर्ज करें और क्या इसे /index.php?home में लिखा गया हो?

RewriteEngine On 
# /home or/get redirected... 
RewriteRule ^(home)?$ /index.php?page=home [L,QSA] 

डीबग करने के लिए, आप RewriteLog सक्षम कर सकते हैं। हालांकि, टिप्पणियों में सुझाए गए अनुसार इसे केवल डीबगिंग के लिए उपयोग किया जाना चाहिए। इसे अक्षम करना या उत्पादन में बहुत कम स्तर निर्धारित करना सर्वोत्तम है।

RewriteLog "/path/to/logs/rewrite.log" 
# Increase the log level (default 0, >4 gets pretty verbose) 
RewriteLogLevel 3 
+0

आपको बहुत बहुत धन्यवाद पर पढ़ सकते हैं, यह बहुत उपयोगी है। –

+1

छोटे पक्ष नोट - 'रीवाइट लॉगलेवल 3' एक गंभीर पुनर्लेखन डीबगिंग के लिए बहुत कम है - यह आपको विवरण में बगैर क्या हो रहा है इसका एक सिंहावलोकन देगा। विवरण देखने के लिए लेवल 9 का उपयोग करें - यह अधिक वर्बोज़ है। – LazyOne

+1

मैं रिवाइटलॉग के बारे में इस उत्तर में एक गंभीर चेतावनी जोड़ूंगा, क्योंकि यदि आप इसके बारे में भूल जाते हैं तो यह संसाधन होग बन सकता है और यह वास्तव में लंबे समय तक उच्च स्तर पर नहीं होना चाहिए क्योंकि वह फ़ाइल गीगाबाइट बन जाएगी बड़ा तेज़ ... – sg3s

3
RewriteRule .*\?page=(\w+)$ /$1/ [NC] 

चाल चलाना चाहिए लेकिन शायद आप अधिक विशिष्ट हो सकते हैं जिसमें मामलों को काम करने की आवश्यकता है?

उसके बारे में यहां वेबसाइट आप इनको

http://corz.org/serv/tricks/htaccess2.php

+0

दिलचस्प दृष्टिकोण, धन्यवाद। तो इस मामले में रिवाइटकंड की कोई ज़रूरत नहीं है? –

+0

संपादन के बाद अपने प्रश्न को फिर से पढ़ना मुझे एहसास है कि यह वही नहीं है जो आप करना चाहते हैं ... सुंदर यूआरएल के लिए मैट्स जवाब देखें। मैंने जो वेबसाइट दी है वह अभी भी एक अच्छा संसाधन है :) – sg3s

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