2013-02-09 35 views
11

यह प्रश्न डुप्लिकेट हो सकता है। लेकिन मुझे मेरे लिए कोई समाधान नहीं मिला। मैं यूआरएल को फिर से लिखना चाहता हूं, जहां मेरे पास एक और दो स्तर पैरामीटर हैं। पहले पैरामीटर p है और दूसरा है spएकाधिक पैरामीटर के लिए .htaccess के साथ यूआरएल को फिर से लिखें

www.domain.com/homewww.domain.com/index.php?p=home इशारा करना चाहिए और www.domain.com/projects/99www.domain.com/index.php?p=projects&sp=99

पर ले जाना चाहिए मैं .htaccess में क्या कैसे करते हैं?

वर्तमान में मेरे htaccess के रूप में followes

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?p=$1 
RewriteRule ^([^/]*)/([^/]*)\$ index.php?p=$1&sp=$2 [L] 

इस htaccess के साथ समस्या यह है कि इसे सही ढंग से एक स्तर यूआरएल इशारा करता है है। यानी, www.domain.com/home। लेकिन दो स्तर यूआरएल नहीं। अर्थात। www.domain.com/projects/99

उत्तर

30

आपको नियमों को अलग से इलाज करना होगा। नियमों से पहले की सभी शर्तें केवल एक नियम पर लागू होती हैं। निम्नलिखित नियमों को उस नियम द्वारा छुआ नहीं जाता है। आपने दो नियमों को 'चेन' करने की कोशिश की। दूसरा नियम कभी मेल नहीं खा सकता था, क्योंकि पहला व्यक्ति कैच-सब बदल गया था। इसके अलावा आपको यह सुनिश्चित करना होगा कि पहले नियम में अवांछित अनुरोध नहीं हैं। इसके बारे में भी सोचें कि क्या आप रेगेक्स में * या + ऑपरेटर का उपयोग करना चाहते हैं। मेरा सुझाव है कि आप + ऑपरेटर का उपयोग करें, ताकि आपके पास 'पृष्ठ' या 'उपपृष्ठ' के लिए खाली मानों का अनुरोध होने पर स्पष्ट त्रुटि संदेश हो।

तो इस के करीब आ सकते हैं आप के लिए क्या देख रहे:

RewriteEngine on 

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

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ index.php?p=$1&sp=$2 [L] 
+0

धन्यवाद एक बहुत दोस्त। – Firnas

+0

बहुत बहुत धन्यवाद। उपर्युक्त परिवर्तन के बाद, यह ठीक काम कर रहा है। लेकिन जब मैं दूसरे स्तर के यूआरएल पर जाता हूं, तो जावास्क्रिप्ट स्रोत, सीएसएस लिंक और आईएमजी स्रोत जैसे मेरे संदर्भ गलत हैं। यह दूसरी फाइल यूआरएल से संबंधित इन फ़ाइलों को देखता है। मैं यह कैसे तय करुं? – Firnas

+2

यह क्लाइंट साइड समस्या की तरह लगता है: अधिकतर संभावना है कि आप उन संसाधनों के लिए सापेक्ष पथ निर्दिष्ट करते हैं? ब्राउजर केवल अनमोडिफाइड अनुरोध यूआरएल के बारे में जानता है, इसलिए संसाधनों को लोड करने का प्रयास करते समय वह गलत पूर्ण यूआरएल बनाता है। इसलिए या तो आपको सर्वर के बजाय ब्राउज़र को रीडायरेक्ट करना होगा-आंतरिक रूप से अनुरोध urls को पुनः लिखना (बदसूरत, दृश्यमान) या आपको संसाधनों के लिए स्वच्छ यूआरएल बनाना होगा। आम तौर पर सर्वर साइड स्क्रिप्ट के अंदर एक बार एक साफ और ध्वनि 'बेस यूआरएल' को परिभाषित करके किया जाता है और संसाधनों को लोड करने के लिए पूर्ण पथ बनाने के लिए इसका उपयोग किया जाता है। – arkascha

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

  • कोई संबंधित समस्या नहीं^_^