2011-06-03 11 views
7

एक नई परियोजना में, एक वेबसाइट में स्थिर HTML पृष्ठों का एक सेट होता है। मालिक को उन्हें गतिशील लोगों में बदलने की जरूरत है। प्रत्येक पृष्ठ में: एक पाठ अनुभाग, एक छोटी तस्वीर और अन्य पृष्ठों की ओर कुछ लिंक हैं, इस से संबंधित हैं।htaccess सामान्य पैटर्न के बिना यूआरएल पर फिर से लिखना

ये सभी मैं डेटाबेस में डाल सकता हूं और गतिशील पृष्ठ (PHP) बना सकता हूं।

मेरी समस्या यह है कि प्रत्येक स्थिर पृष्ठ अद्वितीय है - यूआरएल में कोई सामान्य पैटर्न नहीं है। और इस समय 860 ऐसे पेज हैं। मैं एक यूआरएल हो सकता है जैसे:

folder1/folder2/item1.htm 
folder1/folder2/folder3/item2.htm 
folder1/folder2/folder2-fodler3/item3.htm 

ये 3 सबसे आम पैटर्न अब तक (860 से बाहर 650 यूआरएल की सेवा) कर रहे हैं।

प्रत्येक फ़ोल्डर का नाम वास्तव में एक श्रेणी/उपश्रेणी/कीवर्ड है जिसका उपयोग मैं अपने आइटम के गुणों को निर्धारित करने के लिए कर सकता हूं। एक सामान्य नियम के रूप में, पहले 2 फ़ोल्डर्स (फ़ोल्डर 1 और फ़ोल्डर 2) उत्पाद की श्रेणी और उपश्रेणी हैं, जबकि अगले फ़ोल्डर्स (फ़ोल्डर 3 और उसके बाद) आइटम के अनुभाग (यदि कोई हैं) निर्धारित करता है। मुझे उम्मीद है कि यह समझ में आता है।

तो, एक सोचा वर्ष, स्थिर, एक डेटाबेस दायर के रूप में यूआरएल का उपयोग करें और सामग्री की सेवा के लिए इस मैच के लिए है, कुछ की तरह:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php?path=$1 [L] 

मुझे लगता है कि के अंत में इस नियम डाल मेरे पुनर्लेखन नियम यह सुनिश्चित करेंगे कि अन्य सभी पुनर्लेख अप्रभावित हैं।

क्या यह दृष्टिकोण सलाह दी जाती है? क्या कोई और तरीका है? कुछ और मजबूत/सुरक्षित/प्रकाश?

+2

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

उत्तर

2

विधि आप का वर्णन बहुत आम है और अच्छी तरह से:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php?path=$1 [L] 

आप इसे सीधे अपने PHP स्क्रिप्ट है, जो और अधिक प्रत्यक्ष है में मूल अनुरोध स्ट्रिंग को पार्स द्वारा हल्का कर सकते हैं। देखें कि आपका सर्वर $_SERVER PHP सुपरग्लोबल सरणी में क्या प्रदान करता है, उदा। var_dump($_SERVER); चलाएं।

कि करने के लिए
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) /script.php [L] 

इसके बाद, अपाचे सर्वर संस्करण के आधार पर, यह आगे हो सकता है पर के रूप में सरल बनाया: आप पहले से ही कुछ ऐसा है जो के आपके उपयोग $_GET['path'] आप कर रहे हैं के समान है मिल जाए, यह आम तौर पर अधिक अंतर-प्रचलित है:

FallbackResource /script.php 

यह आपको RewriteCond आप वर्तमान में उपयोग में अतिरिक्त फ़ाइल की जांच पुर्जों।

0

बस उपयोग

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^/script.php?path=$1 [L] 
+0

फिर से लिखने के नियम में कोई लक्ष्य नहीं है (जब तक आप यूआरआई को '[एल] 'में फिर से लिखना नहीं चाहते) –