Sunday, 15 January 2012

apache - Do I need to repeat a RewriteCond in my .htaccess file? -


मेरे पास तीन डोमेन हैं - domain.com , domain.co.uk और domain.ru । मैं एक .htaccess फ़ाइल में निम्नलिखित रीडायरेक्ट प्राप्त करने की कोशिश कर रहा हूं:

  • सभी अनुरोधों को उपसर्ग www।
  • (Www।) Domain.com को सभी अनुरोधों को www.domain.co.uk पर पुनर्निर्देशित किया जाना चाहिए
  • http पर सभी अनुरोधों को https का उपयोग करने के लिए निर्देशित किया जाना चाहिए

निम्नलिखित मेजबान द्वारा प्रदान किए गए प्रलेखन, थोड़ा खोज-फू (और बहुत सिर खरोंचना), मैंने मिलकर बना दिया है- निम्न में से:

  विकल्प + अनुवर्ती लिंक पुनर्विन्यास इंजन पर पुनर्लेखन% {HTTP: X-Forwarded -SSL}! रीवाइट कंड पर% {HTTP_HOST} (www \।)? डोमेन। (कॉम | सह.युक्सेन) $ [एनसी] रीव्रेट नियम ^ (। *) $ Https://www.domain.co.uk/$1 [आर = 301, एल] रीराइटकंड% {HTTP_HOST} (www।।)? डोमेन.ru $ [एनसी] रीव्रेट नियम ^ (। *) $ Https://www.domain.ru/$1 [आर = 301, एल]  

यह वास्तव में ठीक काम करने के लिए प्रतीत होता है, लेकिन मुझे वाकई पता नहीं है कि RewriteCond% {HTTP: X-Forwarded-SSL}! करता है, और I 'मैं सोच रहा हूं कि तर्क दोषपूर्ण है।

मेजबान पर सेट अप की वजह से, कभी भी ऐसा नहीं होता है कि पहली शर्त सही हो, जबकि दूसरी और तीसरी स्थिति झूठी हो। लेकिन अन्य स्थितियों के लिए, जिस तरह से मैं इसे देख रहा हूं वह है:

  • यदि पहली और दूसरी स्थितियाँ सत्य हैं, तो पहले नियम को निष्पादित करें;
  • यदि पहली स्थिति है सच है, दूसरी शर्त झूठी है, लेकिन तीसरे सत्य है, फिर दूसरे नियम को निष्पादित करें;

तो क्या होगा यदि पहली शर्त गलत है? क्या होगा? क्या तर्क दूसरी स्थिति को अनदेखा करता है और तीसरे को आगे बढ़ता है, या यह उस समय केवल बाहर निकल जाएगा? अगर ऐसा मामला है, तो शायद पहले नियम के बाद मुझे पहली शर्त दोहरायी जानी चाहिए, तो यह दोनों परिदृश्यों के लिए काम करे?

क्या ऐसा करने का एक बेहतर / सही / अधिक सटीक तरीका है?

पिछले नियम और मौजूदा नियम के बीच स्थितियां उस नियम पर लागू होती हैं तो नीचे दिए गए उदाहरण में, # 1, # 2 और # 3 एक दूसरे के साथ हैं और # 4 और # 5 एक दूसरे के साथ हैं यदि # 1, # 2 और # 3 सत्य हैं तो नियम # 3 को निष्पादित किया जाता है यदि # 4 और # 5 सही हैं तो नियम # 5 को निष्पादित किया जाता है मेरा मानना ​​है कि mod_rewrite पहले RewriteRule की पहली तर्क का मूल्यांकन करता है, फिर उस नियम से संबंधित किसी भी स्थिति का मूल्यांकन करता है यदि सभी सत्य हैं (या उनमें से कुछ [OR] ध्वज के साथ सही हैं), तो यूआरएल को RewriteRule के दूसरे तर्क के आधार पर फिर से लिखा जाएगा।

> <प्री> रिवेराइटकंड # 1 रिवेराइटकंड # 2 रेवर्ट राउल # 3 रिवेराइटकंड # 4 रेवराइटर्यूल # 5

शर्त के लिए रीवाइटकंड% {HTTP: X-Forwarded-SSL }! पर :

यह जांचता है कि अगर X-Forwarded-SSL हैडर मौजूद नहीं है यदि यह क्लाइंट SSL के साथ HTTP के साथ आपके बाहरी सर्वर से संपर्क करेगा और यह शीर्ष लेख मौजूद होगा, तो बाह्य सर्वर एचटीटीपी बिना HTTP पर एक आंतरिक सर्वर से संपर्क करेगा। आंतरिक सर्वर यह नहीं जानता कि प्रारंभिक अनुरोध एसएसएल के साथ था, और बाहरी सर्वर पर प्रतिक्रिया वापस भेज देगा, और उसके बाद ग्राहक को https को पुनर्निर्देशित करने के लिए भेजा जाएगा चूंकि यह पहले से ही मामला था, इसलिए इसका परिणाम अनंत लूप में होगा। संभवत: आपको इसकी ज़रूरत नहीं है जब तक आप इसे विशेष रूप से सेट नहीं करते। यदि कनेक्शन का केवल एक हिस्सा एन्क्रिप्ट किया गया है, तो किसी अनजान ट्रैफ़िक के जरिए नेटवर्क तक पहुंच हो जाने पर यह छिपकर छिपने या एमआईटीएम हमले के लिए कमजोर हो सकता है।


No comments:

Post a Comment