एचएसटीएस और डबल रीडायरेक्ट


9

मैं एक साझा होस्टिंग LAMP वातावरण में एक छोटी वेबसाइट का प्रबंधन करता हूं: मूल रूप से इसका मतलब केवल एक चीज है जिसे मैं संपादित कर सकता हूं वह है htaccess फ़ाइल।

मैं एचएसटीएस समर्थन जोड़ना चाहता था (और मैंने ऐसा किया था), लेकिन, जब मैंने एचएसटीएस प्रीलोड योग्यता के लिए अपनी वेबसाइट का परीक्षण यहां किया , तो मुझे निम्नलिखित त्रुटि मिली:

त्रुटि: HTTP पहले www पर रीडायरेक्ट करता है

http://example(HTTP) https://examplewww सबडोमेन को जोड़ने से पहले (HTTPS) को तुरंत रीडायरेक्ट करना चाहिए । अभी, पहला रीडायरेक्ट है https://www.example.अतिरिक्त रीडायरेक्ट को यह सुनिश्चित करने की आवश्यकता है कि कोई भी ब्राउज़र जो एचएसटीएस का समर्थन करता है, केवल उप-डोमेन नहीं, बल्कि शीर्ष स्तर के डोमेन के लिए एचएसटीएस प्रविष्टि दर्ज करेगा।

इसलिए, मुझे लगता है कि मुझे इस तरह से उपयोगकर्ताओं को पुनर्निर्देशित करना चाहिए:

  1. http://example (यह वह है जो उपयोगकर्ता अपने ब्राउज़र के एड्रेस बार में दर्ज करता है)
  2. https://example (हम उसे वेबसाइट के HTTPS संस्करण पर पुनर्निर्देशित करते हैं)
  3. https://www.example (हम उसे फिर से उपडोमेन www पर पुनर्निर्देशित करते हैं)

मेरा वर्तमान पुनर्निर्देशन इस प्रकार किया गया है:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

मैंने अंतिम पंक्ति से पहले पुनर्निर्देशित करने की कोशिश की, इस तरह से:

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

लेकिन मुझे ब्राउज़र से "पृष्ठ ठीक से पुनर्निर्देशित नहीं हो रहा है" त्रुटि मिली।

तो, वेबसाइट के http संस्करण से https तक और अंत में www के साथ https में किसी उपयोगकर्ता को पुनर्निर्देशित करने का क्या तरीका है? और: क्या कोई जोखिम हैं?

जवाबों:


10

HSTS प्रीलोड सूची सबमिशन आवश्यकताओं पर ध्यान दिया गया है :

  1. यदि आप पोर्ट 80 पर सुन रहे हैं, तो उसी होस्ट पर HTTP से HTTPS पर रीडायरेक्ट करें।

आपको एक ही मेजबान (यानी HTTP_HOST) पर पुनर्निर्देशित करने की जरूरत है , न कि केवल example.comपहले। example.comयदि उपयोगकर्ता www.example.comसीधे अनुरोध कर रहा है तो आपको रीडायरेक्ट करने की आवश्यकता नहीं है । (परीक्षण में एक अनुरोध शामिल होगा example.com।) उसके बाद आप आवश्यकता पड़ने पर कैनोनिकल www सबडोमेन पर पुनर्निर्देशित कर सकते हैं।

मैंने अंतिम पंक्ति से पहले पुनर्निर्देशित करने की कोशिश की, इस तरह से:

RewriteRule ^(.*)$ https://example.com/$1 [R,L]

यह एक पुनर्निर्देशित लूप पैदा करेगा, क्योंकि पूर्ववर्ती RewriteCondनिर्देश केवल पहले पर लागू होता है RewriteRule, इसलिए दूसरा RewriteRuleबिना शर्त के चलता है।

इसके बजाय निम्नलिखित की तरह कुछ प्रयास करें:

# HTTP to HTTPS redirect
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]

# Canonical www redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]

HTTP_HOSTसर्वर चर के मूल्य में शामिल है HostHTTP अनुरोध हेडर (यानी। जो कुछ भी मेजबान अनुरोध किया जा रहा है)।

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

ध्यान दें कि ये 302 (अस्थायी) पुनर्निर्देश हैं। केवल 301 पर बदलें जब आप सुनिश्चित हों कि यह ठीक काम कर रहा है।

और: क्या कोई जोखिम हैं?

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


RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

एक तरफ: (पल के लिए HSTS को नजरअंदाज करते हुए ...) यह अपने आप से पूरा नहीं होता, क्योंकि यह https://example.com/...(यानी HTTPS और डोमेन एपेक्स) के लिए एक अनुरोध को रद्द नहीं करता है ।


आगे की पढाई:

  • प्रो वेबमास्टर्स एसई पर एक संबंधित प्रश्न का मेरा उत्तर .htaccess: जो एचएसटीएस को लागू करने के बारे में अधिक विस्तार से बताता है : https://webmasters.stackexchange.com/a/112264/52912

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

1
Btw, अपने समाधान सही काम करता है! :-)

1
"होस्टिंग प्रदाता वेबसाइट प्रबंधक में पुनर्निर्देशित पैनल" - मैं हमेशा ऐसे उपकरणों से सावधान रहूंगा। उदाहरण के लिए, cPanel में पुनर्निर्देशन अनुभाग बहुत सीमित है, बल्कि कुख्यात है।
MrWhite

1
यह इस बात पर निर्भर करता है कि आप Strict-Transport-Securityरिस्पांस हेडर कैसे सेट कर रहे हैं । उदाहरण के लिए, इसे रीडायरेक्ट पर सेट करने के लिए आपको निर्देश alwaysपर तर्क का उपयोग करना होगा Headerमैंने प्रो वेबमास्टर्स स्टैक पर एक संबंधित प्रश्न का उत्तर दिया (मेरे उत्तर के पहले भाग को छोड़ें on/ off) जो "एचएसटीएस प्रीलोड " को लागू करने के बारे में अधिक विस्तार से बताता है .htaccess
मृद्वीप

1
आपका स्वागत है। ईमानदार होने के लिए, प्रो वेबमास्टर्स स्टैक संभवत: .htaccess-ऑनलाइन संबंधित प्रश्नों के लिए अधिक अनुकूल है (सर्वरफ्लो ने माना कि आपके पास सर्वर का पूर्ण नियंत्रण है, जिस स्थिति में आप ऐसा नहीं करेंगे .htaccess)। यह यकीनन है आसान अलग का उपयोग कर सर्वर config में इस लागू करने के लिए <VirtualHost>कंटेनर (जब से तुम वार्स और अतिरिक्त env साथ गड़बड़ की जरूरत नहीं है की स्थिति - यह "स्वच्छ" और कम त्रुटि होने का खतरा है)। मुझे नहीं लगता कि मैं "प्रीलोड सूची" प्रस्तुत करने की सिफारिश करूंगा यदि आपके पास केवल पहुंच है .htaccess। (मेरा 2 सी)
मृदित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.