2010-12-14 11 views
8

मैं वेबसाइट पर लोगों को यूआरएल दे रहा हूं, जो वास्तव में कुछ बदसूरत (उसी वेबसाइट पर) इंगित करता है।क्या यह बहुत लंबी है। Htaccess फ़ाइल है?

http://www.mydomain.com/cool-URL
वास्तव में
http://www.mydomain.com/boring.php?id=478547&sessid=34734asdf7&otherboringdetails

को मैं जब भी जरूरत .htaccess फाइल को संशोधित करके इस लक्ष्य को हासिल करने की योजना बना रहा हूँ इंगित करता है। मैं PHP स्क्रिप्ट को .htaccess फ़ाइल में लिखने जा रहा हूं, जब भी एक यूआरएल का नया हाथ-बाहर होता है (एक व्यवस्थापक क्षेत्र से एक गैर-प्रोग्रामर नियंत्रण कर सकता है [इसके लिए यूआरएल शीर्षक निर्दिष्ट करें) नई प्रविष्टि, व्यवस्थापक: इसे स्वचालित रूप से असाइन किया जाएगा])।

क्या यह एक समस्या होगी, खासकर 1000 या ऐसे यूआरएल के बाद? स्वीकार्य वास्तविक संख्या क्या है? क्योंकि, मैं इसे चित्रित कर सकता हूं: सर्वर को एक यूआरएल के लिए अनुरोध प्राप्त होता है, फिर यह इस यूआरएल के लिए सही पेज के लिए .htaccess फ़ाइल की खोज करता है, और अंत में उपयोगकर्ता को सही पृष्ठ पर भेजता है। यदि यह डेटाबेस खोज की तरह कुछ है, तो उपयोगकर्ता को वास्तव में सही पृष्ठ पर पहुंचने में लंबा समय लग सकता है ...

इस पर कोई संकेतक, कृपया?

+0

मुझे रूचि है। – Trufa

उत्तर

18

नहीं, यह ठीक नहीं है और आपकी पृष्ठ-लोड गति में बाधा डाल देगा।

.htaccess फ़ाइलों का मूल्यांकन प्रत्येक सर्वर अनुरोध पर किया जाता है। स्थिर छवियों, सीएसएस और जेएस फ़ाइलों के लिए भी। इसलिए, आप अनुरोध करने के दौरान वेबसर्वर से 1000+ लंबी संभवतः REGEX लाइनों को पार्स करने के लिए कह रहे हैं।

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

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

एचटीएसीएएस फ़ाइल के साथ कुंजी इसे स्मार्ट बनाना है। आप 200 प्रविष्टियों को सूचीबद्ध नहीं करना चाहेंगे। आप बस कुछ ही पंक्तियों के साथ स्मार्ट कर सकते हैं (यदि आप एचटीएसीएएस का उपयोग करना चाहते हैं)।

+0

ठीक है, मैं अपनी समस्या के लिए सही regex बनाने पर शोध करेंगे। स्पष्टीकरण के लिए धन्यवाद :) –

1

यह ठीक होना चाहिए। जब आप वास्तव में लंबे हो जाते हैं तो आप सर्वर अंतराल का अनुभव कर सकते हैं। मैं mod_rewrite चश्मे में देखता हूं, आप कुछ पंक्ति & regex फ़ंक्शन के साथ आगे स्वचालित करने में सक्षम हो सकते हैं। मुझे यूआरएल चर के बारे में पर्याप्त जानकारी नहीं है जो आपको एक उदाहरण देने के लिए पारित किया जाएगा।

5

मैं एक साधारण परीक्षण करता हूं: यादृच्छिक यूआरएल के साथ एक बड़ी। Htaccess फ़ाइल उत्पन्न करें, और परिणामस्वरूप प्रदर्शन को मापें।

import random,string 

def rand_string(): 
    length = random.randint(4,10) 
    res = [] 
    for i in range(length): 
     res.append(random.choice(string.letters)) 
    return ''.join(res) 

for i in range(1000): 
    print "RewriteRule %s http://www.mydomain.com/boring.php?%s [R]" % \ 
    (rand_string(), rand_string()) 
4

अधिकतर नियम वास्तव में अव्यवस्थित हैं। ऐसा नहीं है कि वे एक .htaccess फ़ाइल में हैं या वे प्रत्येक अनुरोध के लिए परीक्षण किए जाते हैं। (कॉन्फ़िगरेशन के आधार पर, यह तब भी हो सकता है जब आप उन्हें अपने सर्वर या वर्चुअल होस्ट कॉन्फ़िगरेशन में डाल दें।)

यह केवल तथ्य है कि यह नियमों के आधार पर और नियमों के आधार पर परीक्षण की विशाल राशि है और प्रत्येक नियम एक मैच मिलने तक परीक्षण किया जाना चाहिए।

ठीक है, आप मेल खाने की संभावना के क्रम में नियमों की व्यवस्था करके इसका विरोध कर सकते हैं ताकि मैच शुरू करने की संभावना अधिक हो। लेकिन यह जटिलता अभी भी सबसे खराब स्थिति में ओ (एन) है।

यदि आपको वास्तव में बहुत अधिक मैपिंग की आवश्यकता है और मैपिंग तय हैं, तो आप RewriteMap hash file का उपयोग कर सकते हैं जिसमें अलग नियमों के लिए ओ (एन) की बजाय ओ (1) की जटिलता है। या आप मैपिंग को अपने PHP एप्लिकेशन में स्थानांतरित करते हैं और वहां करते हैं।

+0

वाह महान युक्तियाँ और लिंक के लिए धन्यवाद! –

1

यह निश्चित रूप से ठीक नहीं है, क्योंकि यहां कुछ लोगों ने उल्लेख किया है।

क्या आप उन सभी यूआरएल को जानते हैं जिन्हें आप पहले लिखना चाहते हैं। यदि ऐसा है, तो आप कुछ डेटाबेस में नियमों को संग्रहीत कर सकते हैं, नियमों के माध्यम से पुन: उत्पन्न कर सकते हैं और वास्तविक URLS को पूर्व-उत्पन्न कर सकते हैं, और उन्हें मेमकैच में संग्रहीत कर सकते हैं, अच्छी दिखने वाली यूआरएल और मूल्य सामग्री के वास्तविक यूआरएल होने के कारण।

फिर जब अनुरोध आता है, तो memcache में कुंजी देखें, और उपयोगकर्ता को वास्तविक URL पर रीडायरेक्ट करें। मुझे यह भी नहीं लगता कि आपको इसके लिए htaccess चाहिए।

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