मैं HTTP के बजाय उपयोगकर्ताओं को HTTPS पर अपने पृष्ठ तक पहुंचने के लिए कैसे बाध्य कर सकता हूं?


137

मुझे केवल एक पृष्ठ मिला है जिसे मैं HTTPS पृष्ठ (Apache पर PHP) के रूप में एक्सेस करने के लिए बाध्य करना चाहता हूं। पूरी निर्देशिका बनाने के लिए मुझे HTTPS की आवश्यकता के बिना यह कैसे करना है? या, यदि आप एक HTTP पेज से HTTPS पेज पर फॉर्म सबमिट करते हैं, तो क्या यह HTTP के बजाय HTTPS द्वारा भेजता है?

यहाँ मेरा उदाहरण है:

http://www.example.com/some-page.php

मैं चाहता हूं कि इसे केवल उसी तक पहुँचा जा सके:

https://www.example.com/some-page.php

ज़रूर, मैं HTTPS संस्करण में बताए गए इस पृष्ठ के सभी लिंक डाल सकता हूं, लेकिन यह कुछ मूर्खों को HTTP पर उद्देश्य से पहुंचने से नहीं रोकता है ...

मैंने सोचा कि एक चीज़ PHP फ़ाइल के हेडर में रीडायरेक्ट डाल रही है ताकि यह सुनिश्चित किया जा सके कि वे HTTPS संस्करण एक्सेस कर रहे हैं

if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
  header('Location: https://www.example.com/some-page.php');
}

लेकिन यह सही तरीका नहीं हो सकता है, क्या यह हो सकता है?



3
क्या कोई कारण है कि आपको सभी पृष्ठों के लिए SSL की आवश्यकता नहीं है?
तहान

जवाबों:


177

जिस तरह से मैंने इसे पहले किया है वह मूल रूप से जैसा आपने लिखा है, लेकिन इसमें कोई हार्डकोड नहीं है:

अगर ($ _ SERVER ["HTTPS"]! = "on")
{
    शीर्ष लेख ("स्थान: https: //"। $ _SERVER ["HTTP_HOST"]। $ _SERVER ["REQUEST_URI"]);
    बाहर जाएं();
}

15
रीडायरेक्ट के बाद स्क्रिप्ट क्विट सुनिश्चित करने के लिए आप बाहर निकलना () कॉल करना भूल गए। मैं आमतौर पर एक फ़ंक्शन में लपेटता हूं जिसे आवश्यकता हैSSSSL ()। मैं इसे किसी भी पृष्ठ के शीर्ष पर कॉल कर सकता हूं जिसे मैं एन्क्रिप्ट करना चाहता हूं।
जेसी वीगर्ट

31
(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")PHP नोटिस को ठीक करने के लिए होना चाहिए, तो बदलें ।
dave1010

$_SERVER[]परिवर्तनीय / उपयोगकर्ताओं के हस्तक्षेप के प्रति संवेदनशील नहीं हैं ?
एरियन फोरेटोश

@ArianFaurtosh सोर्स?
जॉन

3
@ArianFaurtosh को कुछ क्लाइंट हेडर से निकाला जाता है, जैसे HTTP_X_FORWARDED, और हेरफेर किया जा सकता है, लेकिन दूसरों को पसंद करते हैं HTTPSया SERVER_PORTवेब सर्वर से सीधे सेट होते हैं और आमतौर पर सुरक्षित होना चाहिए ।
महन

46

आप इसे अपाचे पर एक निर्देश और mod_rewrite के साथ कर सकते हैं:

<Location /buyCrap.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>

यदि आप चाहें तो नियमित अभिव्यक्तियों का उपयोग करके समय के साथ स्थान को अधिक स्मार्ट बना सकते हैं।


6
यह तुम कहाँ रखोगे? .htaccess फ़ाइल?

1
क्या REQUEST_URI में "क्वेरी स्ट्रिंग" (जैसे? पृष्ठ = 1 और आईडी = 41 आदि) शामिल नहीं है? यह अपाचे दस्तावेज़ीकरण कहता है ... इसलिए यदि मैं site.com/index.php?page=1&id=12 एक्सेस करने का प्रयास करता हूं, तो मुझे साइट को रीडायरेक्ट किया जाएगा ।index.php
Rolf

2
अपाचे प्रलेखन से: REQUEST_URI अनुरोधित URI का पथ घटक, जैसे "/index.html"। यह विशेष रूप से क्वेरी स्ट्रिंग को बाहर करता है जो कि QUERY_STRING नामक अपने स्वयं के चर के रूप में उपलब्ध है। इसलिए आपको REQUEST_URI के बाद QUERY_STRING जोड़ना होगा
Rolf

2
आपको इसके बाद [R] फ्लैज को जोड़ने की भी आवश्यकता है ताकि इसे पुनर्निर्देशित किया जा सके
Rolf

40

आपको क्लाइंट को HTTPS को हमेशा HTTP स्ट्रक्ट ट्रांसपोर्ट सिक्योरिटी (HSTS) हेडर के साथ अनुरोध करने के लिए मजबूर करना चाहिए :

// Use HTTP Strict Transport Security to force client to use secure connections only
$use_sts = true;

// iis sets HTTPS to 'off' for non-SSL requests
if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
    header('Strict-Transport-Security: max-age=31536000');
} elseif ($use_sts) {
    header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
    // we are in cleartext at the moment, prevent further execution and output
    die();
}

कृपया ध्यान दें कि एचएसटीएस अधिकांश आधुनिक ब्राउज़रों में समर्थित है, लेकिन सार्वभौमिक नहीं है। इस प्रकार ऊपर दिए गए तर्क उपयोगकर्ता को समर्थन पर ध्यान दिए बिना पुनर्निर्देशित करते हैं यदि वे HTTP पर समाप्त होते हैं, और फिर HSTS शीर्षलेख सेट करते हैं ताकि यदि संभव हो तो आगे क्लाइंट अनुरोध ब्राउज़र द्वारा पुनर्निर्देशित किया जाए।


मुझे आश्चर्य है कि अन्य उत्तरों में यह शीर्षक शामिल नहीं है, यह काफी महत्वपूर्ण है ... उन दोनों के संयोजन के लिए कोई नुकसान?
किसर

नहीं ... आप निश्चित रूप से उस हेडर को वैसे भी सेट कर सकते हैं यदि आप हमेशा HTTPS चाहते हैं। आपके द्वारा रीडायरेक्ट करने से पहले और बाद में इसे सेट करना निरर्थक है। मैंने अपनी प्रतिक्रिया में ऊपर भी संशोधन किया है ताकि संगतता को अधिक सटीक रूप से समझा जा सके।
याकूब स्वार्टवुड

1
(मूल टिप्पणी को कम करना) मुझे "सिर्फ एक पृष्ठ" की विशिष्ट आवश्यकता पर ध्यान नहीं गया। HSTS सभी पृष्ठों पर लागू होगा; मेरा उत्तर तकनीकी रूप से गलत है।
याकूब स्वार्टवुड

4
FYI करें, मानक RFC 6797 खंड 7.2 कहता है "एक HSTS होस्ट जरूरी नहीं है कि HTTP प्रतिसाद में STS शीर्षक फ़ील्ड गैर-सुरक्षित परिवहन से अवगत कराया जाए।" जब अनुरोध नियमित रूप से http हो तो इसे भेजने की कोई आवश्यकता नहीं है, अगर ब्राउज़र मानक का पालन करता है तो इसे अनदेखा किया जाना चाहिए।
फ्रैंक फोर्ट

1
@ अगर कोई MITM है और आपकी वेबसाइट में यह शीर्ष लेख नहीं है, तो आप किसी सम्मिलित सत्र को http पर जाने की अनुमति दे सकते हैं और लोग अपने विवरणों को इनपुट कर सकते हैं और वे संभवत: नोटिस नहीं करेंगे और पुनर्निर्देशन में मदद नहीं करेगा (आदमी में मध्य https के माध्यम से साइट से कनेक्ट होगा और इसे http के रूप में प्रस्तुत करेगा)। इस हेडर का उपयोग क्लाइंट साइड पर HTTPS को करेगा। यह हाल ही में WPA2 वाईफ़ाई सुरक्षा भेद्यता के कारण विशेष रूप से महत्वपूर्ण है।
रुडिगर

19

मैंने अभी एक .htaccess फ़ाइल बनाई और जोड़ी:

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

सरल !


9
// Force HTTPS for security
if($_SERVER["HTTPS"] != "on") {
    $pageURL = "Location: https://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    header($pageURL);
}

8

लोड बैलेंसर के पीछे भागते समय ऐसा कुछ करना पड़ा। हैट टिप https://stackoverflow.com/a/16076965/766172

function isSecure() {
    return (
        (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
     || $_SERVER['SERVER_PORT'] == 443
     || (
            (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
         || (!empty($_SERVER['HTTP_X_FORWARDED_SSL'])   && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on')
        )
    );
}

function requireHTTPS() {
    if (!isSecure()) {
        header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], TRUE, 301);
        exit;
    }
}

6

PHP तरीका:

$is_https=false;
if (isset($_SERVER['HTTPS'])) $is_https=$_SERVER['HTTPS'];
if ($is_https !== "on")
{
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    exit(1);
}

अपाचे mod_rewrite तरीका:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

मैं PHP तरीका पसंद करता हूं क्योंकि ऐसे उदाहरण हैं जहां मैं एसएसएल के लिए आवश्यकता को ओवरराइड करना चाहता हूं। उदाहरण के लिए, एपीआई के लिए स्थानीय पहुंच और मोज़िला थंडरबर्ड के ऑटोकैफिगर जैसी चीजें, आदि
जय

PHP विधि पूरी तरह से मेरे लिए काम करती है, अत्यधिक अनुशंसित है।
मोक्सेट जान

5

http://www.besthostratings.com/articles/force-ssl-htaccess.html

कभी-कभी आपको यह सुनिश्चित करने की आवश्यकता हो सकती है कि उपयोगकर्ता आपकी साइट को securte कनेक्शन पर ब्राउज़ कर रहा है। उपयोगकर्ता को हमेशा सुरक्षित कनेक्शन (https: //) पर पुनर्निर्देशित करने का एक आसान तरीका। निम्न फ़ाइल युक्त .htaccess फ़ाइल के साथ पूरा किया जा सकता है:

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

कृपया, ध्यान दें कि .htaccess वेब साइट के मुख्य फ़ोल्डर में स्थित होना चाहिए।

यदि आप किसी विशेष फ़ोल्डर के लिए HTTPS को उपयोग करने के लिए बाध्य करना चाहते हैं, तो:

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

.Htaccess फ़ाइल को उस फ़ोल्डर में रखा जाना चाहिए जहाँ आपको HTTPS को बाध्य करने की आवश्यकता है।


5

ठीक है .. अब इस पर कई टन सामान है लेकिन कोई भी वास्तव में "सुरक्षित" प्रश्न को पूरा नहीं करता है। मेरे लिए यह असुरक्षित है कि कुछ का उपयोग करें।

जब तक आप इसे चारा के रूप में उपयोग नहीं करते हैं।

$ _SERVER प्रचार किसी की इच्छा पर बदला जा सकता है जो जानता है कि कैसे।

जैसा कि सज्जाद तुषार खान और thebigjc ने कहा है कि आप इसे करने के लिए एक प्रकार का उपयोग भी कर सकते हैं और यहां बहुत सारे उत्तर हैं।

बस जोड़ दो:

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

जो आपके पास आपके .httaccess और Thats के अंत में है।

फिर भी हम उतने सुरक्षित नहीं हैं जितना हम संभवतः इन 2 उपकरणों के साथ हो सकते हैं।

शेष सरल है। अगर वहाँ लापता गुण हैं ...

if(empty($_SERVER["HTTPS"])){ // SOMETHING IS FISHY
}

if(strstr($_SERVER['HTTP_HOST'],"mywebsite.com") === FALSE){// Something is FISHY
}


यह भी कहें कि आपने अपनी नि: शुल्क फ़ाइल अपडेट कर दी है और आप जाँचते हैं:

if($_SERVER["HTTPS"] !== "on"){// Something is fishy
}

और भी कई चर हैं जिन्हें आप देख सकते हैं।

HOST_URI (अगर जाँच करने के लिए इसके बारे में स्थिर विशेषताएँ हैं)

HTTP_USER_AGENT (एक ही सत्र विभिन्न मूल्यों)

तो सभी Im कह रही है कि बस एक या दूसरे के लिए व्यवस्थित नहीं है जब जवाब एक संयोजन में निहित है।

अधिक जानकारी के लिए पुनर्लेखन की जानकारी के लिए डॉक्स देखें-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

यहाँ कुछ स्टैक्स -> .htaccess और modrewrite का उपयोग करके फोर्स एसएसएल / https
और
पूर्ण URL प्राप्त करना। वर्तमान पृष्ठ (PHP)
एक जोड़े के नाम के लिए।


2
लेकिन अब मैं निम्नलिखित त्रुटि मिलती है: ERR_TOO_MANY_REDIRECTS। मैं यह कैसे तय करुं?
पाथ्र्स

3

$_SERVER['HTTPS']यह बताने के लिए उपयोग करें कि क्या यह एसएसएल है , और यदि नहीं तो सही जगह पर रीडायरेक्ट।

और याद रखें, फॉर्म को प्रदर्शित करने वाले पृष्ठ को HTTPS के माध्यम से फीड करने की आवश्यकता नहीं है, यह पोस्ट बैक URL है जिसे इसकी सबसे अधिक आवश्यकता है।

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


यह सच है कि फॉर्म को खुद को https होने की आवश्यकता नहीं है, हालांकि यह उन अधिकांश लोगों के लिए एक अच्छा विचार है जो इसे नहीं जानते हैं। यदि वे फॉर्म जमा करने वाले हैं और नोटिस करते हैं कि लॉक आइकन नहीं है, तो वे गलती से मान सकते हैं कि फॉर्म असुरक्षित है।
ग्रीम पेरो

1
@Gememe: इसके अलावा किसी को भी यह पता नहीं चल सकता है कि फॉर्म कभी भी https के जरिए भेजा जाएगा पूरा फ़ॉर्म (http के माध्यम से प्रदर्शित) एक नकली हो सकता है, किसी अज्ञात या http क्लीटेक्स साइट पर सबमिट किया जा सकता है। Https सिर्फ एन्क्रिप्शन के बारे में नहीं है, यह सर्वर को भी प्रमाणित करता है।
ओलाफ कोक सिप

3

उपयोग htaccess:

#if domain has www. and not https://
  RewriteCond %{HTTPS} =off [NC]
  RewriteCond %{HTTP_HOST} ^(?i:www+\.+[^.]+\.+[^.]+)$
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307]

#if domain has not www.
  RewriteCond %{HTTP_HOST} ^([^.]+\.+[^.]+)$
  RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=307]

1

HTTP और HTTPS को एक ही पृष्ठ पर न मिलाएं। यदि आपके पास एक फॉर्म पेज है जो HTTP के माध्यम से परोसा जाता है, तो मैं डेटा सबमिट करने के बारे में घबरा जाऊंगा - मैं यह नहीं देख सकता कि क्या सबमिट सोर्स और इसके लिए शिकार किए बिना HTTPS या HTTP पर जाता है।

सबमिट लिंक के साथ HTTPS पर फॉर्म को सेव करना लाभ के लिए भारी बदलाव नहीं है।


1

यदि आप Apache या LiteSpeed ​​जैसी किसी चीज़ का उपयोग करते हैं, जो .htaccess फ़ाइलों का समर्थन करती है, तो आप निम्न कार्य कर सकते हैं। यदि आपके पास पहले से .htaccess फ़ाइल नहीं है, तो आपको अपनी रूट निर्देशिका में एक नई .htaccess फ़ाइल बनानी चाहिए (आमतौर पर जहाँ आपका index.php स्थित है)। अब इन पंक्तियों को अपने .htaccess में पहले फिर से लिखना नियमों के रूप में जोड़ें:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

आपको केवल अपने सभी। पुनर्लेखन नियमों के लिए अपने .htaccess में एक बार निर्देश "रिवरटेन्जाइन ऑन" की आवश्यकता है, इसलिए यदि आपके पास पहले से ही है, तो बस दूसरी और तीसरी पंक्ति की प्रतिलिपि बनाएँ।

आशा है कि ये आपकी मदद करेगा।


यह मेरे लिए काम किया है और मैं Zend 2 के समान फ्रेमवर्क पर अपनी खुद की स्क्रिप्ट में क्या उपयोग कर रहा हूं - मुझे यह समझ में नहीं आता है।
एंटोनियो

हो सकता है कि आप निराश हो गए क्योंकि इसका उत्तर लगभग @MatHatrik से एक जैसा है जो एक साल से अधिक समय पहले पोस्ट किया गया था?
विल्ट

1

इसका उपयोग करना पर्याप्त नहीं है:

if($_SERVER["HTTPS"] != "on")
{
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

यदि आपके पास कोई http सामग्री (बाहरी http छवि स्रोत की तरह) है, तो ब्राउज़र एक संभावित खतरे का पता लगाएगा। तो सुनिश्चित करें कि आपके कोड के अंदर आपके सभी रेफरी और src https हैं


1

मैं कई समाधानों के माध्यम से $ _SERVER [HTTPS] की स्थिति की जाँच कर रहा हूँ लेकिन ऐसा लगता है कि यह विश्वसनीय नहीं है क्योंकि कभी-कभी यह स्क्रिप्ट को आंतरिक लूप पुनर्निर्देशित करने के लिए सेट, ऑन, ऑफ आदि नहीं करता है।

यदि आपका सर्वर $ _SERVER [SCRIPT_URI] का समर्थन करता है तो यहां सबसे विश्वसनीय समाधान है

if (stripos(substr($_SERVER[SCRIPT_URI], 0, 5), "https") === false) {
    header("location:https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]");
    echo "<meta http-equiv='refresh' content='0; url=https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]'>";
    exit;
}

कृपया ध्यान दें कि आपकी स्थापना के आधार पर, आपका सर्वर $ _SERVER [SCRIPT_URI] का समर्थन नहीं कर सकता है, लेकिन यदि ऐसा होता है, तो उपयोग करने के लिए यह बेहतर स्क्रिप्ट है।

आप यहां देख सकते हैं: कुछ PHP संस्थापनों में $ _SERVER ['SCRIPT_URI'] और अन्य क्यों नहीं हैं


1

IIS का उपयोग करने वालों के लिए web.config में यह लाइन जोड़ने से मदद मिलेगी:

<httpProtocol>
    <customHeaders>
        <add name="Strict-Transport-Security" value="max-age=31536000"/>
    </customHeaders>
</httpProtocol>
<rewrite>
    <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
              <match url="(.*)" />
              <conditions>
                 <add input="{HTTPS}" pattern="off" ignoreCase="true" />
              </conditions>
              <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
         </rule>
    </rules>
</rewrite>

एक पूर्ण उदाहरण फ़ाइल

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Strict-Transport-Security" value="max-age=31536000"/>
             </customHeaders>
        </httpProtocol>
        <rewrite>
            <rules>
                <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                      <match url="(.*)" />
                      <conditions>
                         <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                      </conditions>
                      <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
                 </rule>
            </rules>
       </rewrite>
   </system.webServer>
</configuration>

प्रश्न विशेष रूप से अपाचे के बारे में पूछता है, आईआईएस नहीं।
क्वेंटिन

1
A) इसके अपाचे को टैग नहीं किया गया है। अपाचे का उद्धरण उद्धरणों के बीच किया गया है। बी) इसका एक सामान्य सवाल है जिसका सामान्य रूप से अपाचे से कोई लेना-देना नहीं है।
Webservers का

0

आपको सुरक्षा कारणों से नहीं करना चाहिए। खासकर अगर कुकीज़ यहाँ खेलने में हैं। यह आपको कुकी-आधारित रिप्ले हमलों के लिए खुला छोड़ देता है।

किसी भी तरह से, आपको इसे ट्यून करने के लिए अपाचे नियंत्रण नियमों का उपयोग करना चाहिए।

फिर आप HTTPS सक्षम होने के लिए परीक्षण कर सकते हैं और जहां आवश्यक हो, अनुप्रेषित कर सकते हैं।

आपको केवल एक FORM POST (कोई प्राप्त नहीं) का उपयोग करके वेतन पृष्ठ पर पुनर्निर्देशित किया जाना चाहिए, और POST के बिना पृष्ठ तक पहुंच को अन्य पृष्ठों पर वापस निर्देशित किया जाना चाहिए। (यह लोगों को सिर्फ गर्म-कूदते हुए पकड़ेगा।)

http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/

शुरू करने के लिए एक अच्छी जगह है, अधिक प्रदान नहीं करने के लिए माफी। लेकिन आपको वास्तव में चाहिए एसएसएल के माध्यम से सब कुछ छोड़ ।

यह अधिक सुरक्षात्मक है, लेकिन कम से कम आपको चिंताएं कम हैं।


0

शायद यह आपकी मदद कर सकता है, कि मैंने अपनी वेबसाइट के लिए यह कैसे किया, यह एक आकर्षण की तरह काम करता है:

$protocol = $_SERVER["HTTP_CF_VISITOR"];

if (!strstr($protocol, 'https')){
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    exit();
}

0

यदि आप ऐसा करने के लिए PHP का उपयोग करना चाहते हैं तो इस तरह से मेरे लिए वास्तव में अच्छी तरह से काम किया है:


<?php

if(!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != "on") {
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"], true, 301);
    //Prevent the rest of the script from executing.
    exit;
}
?>

यह $ _SERVER सुपरग्लोबल सरणी में HTTPS चर की जाँच करता है कि यह "ऑन" के बराबर है या नहीं। यदि चर पर नहीं के बराबर है।


-1

मैंने इस स्क्रिप्ट का उपयोग किया है और यह साइट के माध्यम से अच्छी तरह से काम करता है।

if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "off"){
    $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    enter code hereheader('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $redirect);
    exit();
}

-2
<?php 
// Require https
if ($_SERVER['HTTPS'] != "on") {
    $url = "https://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    header("Location: $url");
    exit;
}
?>

बहुत आसान।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.