2008-08-12 17 views
136

आप HTTPS को HTTP पर कैसे रीडायरेक्ट करते हैं? यही है, जो (प्रतीत होता है) के विपरीत हर कोई सिखाता है।आप HTTPS को HTTP पर कैसे रीडायरेक्ट करते हैं?

मेरे पास HTTPS पर एक सर्वर है जिसके लिए मैंने एक एसएसएल प्रमाणीकरण और एक दर्पण का भुगतान किया जिसके लिए मैंने आपात स्थिति के लिए नहीं रखा है और इसके लिए प्रमाणन प्राप्त करने की योग्यता नहीं है।

मेरे ग्राहक के डेस्कटॉप पर मेरे पास कुछ शॉर्टकट हैं जो http://production_server और https://production_server (दोनों कार्य) पर इंगित करते हैं। हालांकि, मुझे पता है कि अगर मेरा उत्पादन सर्वर नीचे चला जाता है, तो DNS फॉरवर्डिंग में शामिल होता है और उन क्लाइंट्स जिनमें उनके शॉर्टकट पर "https" होता है, https://mirror_server (जो काम नहीं करता) पर घूर रहे होंगे और एक बड़ी वसा इंटरनेट एक्सप्लोरर 7 लाल स्क्रीन मेरी कंपनी के लिए असहजता।

दुर्भाग्य से, मैं इसे क्लाइंट स्तर पर बस स्विच नहीं कर सकता। ये उपयोगकर्ता बहुत कंप्यूटर अशिक्षित हैं: और एचटीटीपीएस "असुरक्षा" त्रुटियों को देखने से बाहर निकलने की संभावना है (विशेष रूप से जिस तरह से फ़ायरफ़ॉक्स 3 और इंटरनेट एक्सप्लोरर 7 इसे आजकल संभालते हैं: पूर्ण रोकें, शुक्रिया की तरह, लेकिन मुझे यहां एलओएल की मदद नहीं करना)।

यह very easyto findhttp->https redirection के लिए Apache solutions है, लेकिन मुझे के जीवन के लिए मैं विपरीत नहीं कर सकते।

विचार?

उत्तर

114

यह परीक्षण नहीं किया गया है, लेकिन मुझे लगता है कि इस mod_rewrite

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

मैं इसे कैसे काम करूं (इस कोड को काम करने के लिए मुझे इस कोड से अपने डोमेन में क्या बदलना है)? – Enve

+1

Enve: बस अपनी साइट के vhost_ssl.conf कॉन्फ़िगरेशन (या साइट की रूट पर .htaccess) में जोड़ें। कुछ भी बदलने की जरूरत नहीं है, यह गतिशील रूप से उसी मेजबान नाम और यूआरएल पथ का उपयोग करेगा। – Meogi

+1

मुझे लगता है कि आप क्वेरी स्ट्रिंग को भी पकड़ना चाहते हैं। मुझे यकीन नहीं है, लेकिन मुझे लगता है कि उपरोक्त स्निपेट क्वेरी स्ट्रिंग को https से http तक अग्रेषित नहीं करेगा। – Rustavore

64

का उपयोग कर काम करना चाहिए ध्यान रखें कि पुनर्लेखन इंजन केवल में किक एक बार HTTP अनुरोध प्राप्त हो गया है - जो आप अभी भी एक प्रमाण पत्र की आवश्यकता होगी इसका मतलब है , ग्राहक को अनुरोध भेजने के लिए कनेक्शन स्थापित करने के लिए!

हालांकि यदि बैकअप मशीन में एक ही होस्टनाम (जहां तक ​​ग्राहक संबंधित है) दिखाई देगा, तो कोई कारण नहीं होना चाहिए कि आप मुख्य उत्पादन मशीन के समान प्रमाणपत्र का उपयोग नहीं कर सकें।

+0

इस सीमा को कैसे दूर किया जा सकता है? मुझे भी वही समस्या हो रही है। रीडायरेक्ट से पहले ब्राउजर से सर्टिफिकेट त्रुटि प्राप्त करना। –

-7

जहां तक ​​मेरा एक सरल मेटा रिफ़्रेश के बारे में पता कर रहा हूँ भी पैदा कर रहा त्रुटियों के बिना काम करता है:

<meta http-equiv="refresh" content="0;URL='http://www.yourdomain.com/path'"> 
+11

मैं चाहता हूं कि मतदाताओं को वोटों के कारणों की व्याख्या करने वाली टिप्पणियां छोड़ने की आवश्यकता होगी। निजी तौर पर, मैं इस जवाब को तब तक नहीं चुनूंगा जब तक कि डेवलपर के पास उस सर्वर तक पहुंच न हो, जिसके लिए आप विकास कर रहे थे लेकिन आपके पास पृष्ठ तक पहुंच थी। एक समस्या यह है कि आपको यह काम करने के लिए हर पृष्ठ पर हर पथ को हार्डकोड करना होगा। यदि आप मान सकते हैं कि जावास्क्रिप्ट आपके महत्वपूर्ण उपयोग मामलों के लिए सक्षम है, तो आप http में बदलने के लिए जावास्क्रिप्ट का उपयोग करना बेहतर कर देंगे। उपर्युक्त उत्तर बेहतर हैं क्योंकि सर्वर पर होने के बाद उन्हें जावास्क्रिप्ट की आवश्यकता नहीं होती है। – Rustavore

+2

बस: क्योंकि htaccess उससे कहीं बेहतर विकल्प है। साथ ही, यदि आपके पास प्रमाणपत्र नहीं है तो यह https प्रोटोकॉल को http पर रीडायरेक्ट करने के लिए समस्या को ठीक नहीं करेगा। – miduga

+1

कार्रवाई को सर्वर द्वारा संसाधित किया जाना चाहिए, न कि 'ए' दस्तावेज़ जो यह सेवा दे सकता है। – albal

11

ejunker के जवाब के आधार पर, इस, समाधान मेरे लिए काम कर रहा है एक ही सर्वर पर नहीं बल्कि एक पर बादल वातावरण

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

ऊपर से कोई भी समाधान आप के लिए काम करते हैं (वे मेरे लिए नहीं था) यहाँ क्या अपने सर्वर पर काम किया है:

RewriteCond %{HTTPS} =on 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 
+6

अक्सर बार, आप 'एल' नहीं चाहते हैं (जिसका अर्थ है "अंतिम नियम")। यदि आप वर्डप्रेस या किसी अन्य सीएमएस का उपयोग कर रहे हैं, तो 'एल' ध्वज पृष्ठ अनुरोध को ठीक से रूट करने से रोक सकता है। इसके बजाए उपयोग करें: 'पुनर्लेखन^^। * *) $ Http: //% {HTTP_HOST}/$ 1 [आर = 301] ' – Rustavore

6

उन लोगों के लिए जो .conf फ़ाइल का उपयोग कर रहे हैं।

<VirtualHost *:443> 
    ServerName domain.com 
    RewriteEngine On 
    RewriteCond %{HTTPS} on 
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} 

    SSLEngine on 
    SSLCertificateFile /etc/apache2/ssl/domain.crt 
    SSLCertificateKeyFile /etc/apache2/ssl/domain.key 
    SSLCACertificateFile /etc/apache2/ssl/domain.crt 

</VirtualHost> 
1

जब आप कर सकते हैं mod_rewrite का उपयोग करना ovoid बेहतर है। आपके मामले में मैं इस के साथ पुनर्लेखन की जगह लेंगे:

<If "%{HTTPS} == 'on'" > 
      Redirect permanent/http://production_server/ 
    </If> 

<If> निर्देश अपाचे 2 में ही उपलब्ध है।4 इस blog here

3

के अनुसार सब से ऊपर जब मैं CloudFlare इस्तेमाल किया काम नहीं किया, यह मेरे लिए काम किया:

RewriteCond %{HTTP:X-Forwarded-Proto} =https 
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

और यह एक निश्चित रूप से रास्ते में प्रॉक्सी के बिना काम करता है:

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

वर्डप्रेस वेबसाइट पर मेरे लिए कोई भी जवाब काम नहीं करता है लेकिन निम्नलिखित कार्यों (यह अन्य उत्तरों के समान है लेकिन थोड़ा बदलाव है)

RewriteEngine On 
RewriteCond %{HTTPS} on 
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
संबंधित मुद्दे