2012-10-21 18 views
52

का उपयोग कर http रीडायरेक्ट करने के लिए एचटीपीएस https://www.example.com से http://www.example.com पर रीडायरेक्ट करने का प्रयास कर रहा हूं। मैं .htaccess फाइलएचटीएसीएस

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

इस कोड को सफलतापूर्वक पुनर्निर्देश http://www.example.com को https://example.com में निम्न कोड की कोशिश की। हालांकि जब मैं https://www.example.com टाइप करता हूं तो यह मुझे ब्राउज़र में "वेब पेज उपलब्ध नहीं है" त्रुटि देता है।

मैं भी सफलता नहीं मिली निम्नलिखित 2 कोड की कोशिश की है

प्रयास 1

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/(.*):NOSSL$ http://www.example.com/$1 [R=301,L] 

प्रयास 2

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

उपरोक्त दोनों प्रयास विफल रहे। कोई सुझाव?

उत्तर

82

प्रयास 2 सही के करीब था। बस इसे थोड़ा सा संशोधन:

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+5

उपयोग करने के लिए 'आर = 302' अच्छा होगा आप _permanent_ करना चाहते हैं नहीं है। जब मेरी एसएसएल समाप्त हो गई और मुझे दर्दनाक नवीनीकरण प्रक्रियाओं से पहले मैं अस्थायी रूप से 'http' पर वापस जाना चाहता था तो मुझे परेशानी में उतरा। – ProfNandaa

+0

दर्दनाक नवीनीकरण? या तो प्रमाण पत्र फ़ाइलों या एक साधारण स्क्रिप्ट निष्पादन का एक फ्लिप होना चाहिए ... 302 के साथ समस्या यह है कि ग्राहकों को हर बार इसका पालन करना होता है, इसलिए आप क्लाइंट और सर्वर पक्ष के लिए अनुरोधों की संख्या बढ़ाते हैं। – arkascha

+0

@arkascha बस समझना चाहता था, रिवाइटकंड एक कथन कथन के रूप में कार्य करेगा? मेरा मतलब है कि यह केवल https कहां पाता है, यह अगले पुनर्लेखन नियम चलाएगा। मैं पूछ रहा हूं क्योंकि Google ने बिना किसी लिंक से उन्हें अपने इंडेक्स में कुछ https url स्वचालित रूप से लिया है। इसलिए किसी भी Miscongong से बाहर निकलने के लिए हम 302 से ऊपर कोड का उपयोग कर रहे हैं सभी https url –

6
RewriteEngine On 
RewriteCond %{SERVER_PORT} 443 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

ऐसा लगता है कि अन्य लोग नहीं करेंगे! –

22

हालांकि, अगर आपकी वेबसाइट एक सुरक्षा प्रमाणपत्र नहीं है, यह एक साझा होस्टिंग पर्यावरण पर है, और आप अपनी वेबसाइट है जब "चेतावनी" पाने के लिए नहीं करना चाहते हैं https के माध्यम से अनुरोध किया जा रहा है, आप htaccess का उपयोग कर इसे पुनर्निर्देशित नहीं कर सकते हैं। इसका कारण यह है कि अनुरोध से पहले चेतावनी संदेश ट्रिगर हो जाता है, यहां तक ​​कि htaccess फ़ाइल में भी जाता है, इसलिए आपको इसे सर्वर पर ठीक करना होगा। /etc/httpd/conf.d/ssl.conf पर जाएं और वर्चुअल सर्वर 443 के बारे में भाग को टिप्पणी करें। लेकिन बाधाएं हैं कि आपका होस्टिंग प्रदाता आपको इतना नियंत्रण नहीं देगा। तो आपको या तो एक अलग मेजबान में जाना होगा या एसएसएल खरीदना होगा ताकि आपके एचटीएसीएसी को रीडायरेक्ट करने का मौका मिलने से पहले चेतावनी ट्रिगर न हो।

+1

इस उत्तर के लिए धन्यवाद। चूंकि हमारी मौजूदा साइट में एसएसएल प्रमाणपत्र नहीं है, इसलिए कोई फर्क नहीं पड़ता कि मेरी .htaccess कितनी सही है, यह काम नहीं करेगा। – marknt15

+0

@arkascha मैंने यहां साझा की गई विभिन्न विधियों का प्रयास किया है लेकिन कोई भी काम नहीं किया है। हां मैंने एक साझा वातावरण पर परीक्षण किया। एसएसएल सक्रिय नहीं है हालांकि एक साझा एसएसएल मुक्त है।प्रश्न में https लिंक पहले से SSL- सक्षम वातावरण से ऐतिहासिक/विरासत में था। मुझे ब्राउजर चेतावनी (देव मोड में) पर कोई फर्क नहीं पड़ता लेकिन मुझे कम से कम होने के लिए रीडायरेक्ट की आवश्यकता थी। कोई भी और अधिक लीड पेश करने में सक्षम है? –

1

http और https के बीच का अंतर यह है कि https अनुरोध एक एसएसएल-एन्क्रिप्टेड कनेक्शन पर भेजे जाते हैं। ब्राउजर http अनुरोध भेजने से पहले एसएसएल-एन्क्रिप्टेड कनेक्शन ब्राउज़र और सर्वर के बीच स्थापित होना चाहिए।

एचटीपीएस अनुरोध वास्तव में http अनुरोध हैं जो एक एसएसएल एन्क्रिप्टेड कनेक्शन पर भेजे जाते हैं। यदि सर्वर एक एसएसएल एन्क्रिप्टेड कनेक्शन स्थापित करने से इंकार कर देता है तो ब्राउज़र के पास अनुरोध भेजने के लिए कोई कनेक्शन नहीं होगा। ब्राउज़र और सर्वर के पास एक-दूसरे से बात करने का कोई तरीका नहीं होगा। ब्राउज़र उस यूआरएल को भेजने में सक्षम नहीं होगा जो वह एक्सेस करना चाहता है और सर्वर किसी अन्य यूआरएल पर रीडायरेक्ट के साथ प्रतिक्रिया नहीं दे पाएगा।

तो यह संभव नहीं है। यदि आप https लिंक का जवाब देना चाहते हैं, तो आपको एक एसएसएल प्रमाणपत्र की आवश्यकता है।

5

आप निम्नलिखित नियम से पुनर्निर्देशित करने के लिए उपयोग कर सकते हैं httpsकरने के लिए http:

RewriteEngine On 


RewriteCond %{HTTPS} ^on$ 
RewriteRule ^(.*)$ http://example.com/$1 [NC,L,R] 

स्पष्टीकरण: HTTPS पर (अनुरोध किया जाता है

जांच करें कि क्या का उपयोग कर https)

फिर

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

http://example.com/foo के लिए किसी भी अनुरोध (https://example.com/foo) पुन: निर्देशित।

  • $ 1, RewriteRule पैटर्न में regex का हिस्सा है इसमें जो भी मूल्य में (। +) कब्जा कर लिया था, इस मामले में, यह डोमेन नाम के बाद पूर्ण REQUEST_URI सब कुछ कैप्चर करता है।

  • [एनसी, एल, आर] झंडे हैं, एनसी यूरी केस सेन्स्टिव बनाता है, आप अनुरोध में अपरकेस या लोअरकेस अक्षरों दोनों का उपयोग कर सकते हैं।

एल झंडा अन्य नियमों प्रसंस्करण यदि currunt नियम से मेल खाता है को रोकने के लिए सर्वर बताता है, यह एल ध्वज का उपयोग करने के नियम टकराव से बचने के लिए जब आप एक ब्लॉक में नियमों पर तो अधिक है महत्वपूर्ण है।

आर ध्वज बाहरी पुनर्निर्देशन के लिए उपयोग किया जाता है।

0
RewriteCond %{HTTP:X-Forwarded-Proto} =https 
+0

इससे मुझे बहुत मदद मिलती है। –

0

आपका कोड सही है। बस उन्हें <VirtualHost *:443>

उदाहरण के अंदर डाल दिया:

<VirtualHost *:443> 
    SSLEnable 

    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

</VirtualHost>