PHP से HTTP से HTTPS पर रीडायरेक्ट करना


107

मैं एक शॉपिंग कार्ट वेबसाइट पर काम कर रहा हूं और जब वह अपने बिलिंग विवरण दर्ज कर रहा है और अगले पेज के लिए HTTPS कनेक्शन बनाए रखता है, जब तक कि वह लॉग आउट नहीं हो जाता है, तब मैं उपयोगकर्ता को एक HTTPS पृष्ठ पर पुनर्निर्देशित करना चाहूंगा।

ऐसा करने के लिए मुझे सर्वर पर (मैं Apache का उपयोग कर रहा हूं) इंस्टॉल करने की क्या आवश्यकता है, और PHP से यह रीडायरेक्ट कैसे किया जा सकता है?

जवाबों:


247

कुछ इस तरह से प्रयास करें (Apache और IIS के लिए काम करना चाहिए):

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

5
यह हमेशा काम नहीं करता है। मैंने इसका उपयोग करने की कोशिश की और $ _SERVER सरणी में कोई 'https' तत्व नहीं था, जिसके कारण यह 'बहुत अधिक रीडायरेक्ट' की त्रुटि दे रहा था। अन्य विधि का उपयोग करने की आवश्यकता होगी।
उस्मान ज़हीर

5
मुझे if( $_SERVER['HTTPS'] == "off")इस कोड को काम करने के लिए परीक्षण करना था । मुझे लगता है कि यह इसलिए है क्योंकि मैं आईआईएस पर हूं, ओपी की तरह अपाचे नहीं।
निक पिकरिंग

1
@NicholasPickering Jepp, $ _SERVER चर webservers के साथ भिन्न हो सकते हैं।
राफेल मिशेल

6
नोट: शेष पृष्ठ को निष्पादित करने से रोकने के लिए हेडर पुनर्निर्देशन (और संभवतः क्लाइंट को अतिरिक्त जानकारी भेजना) (यानी हैकर्स या ब्राउज़र जो हैडर का सम्मान नहीं कर सकते हैं) करने के लिए डाई () या निकास () महत्वपूर्ण हो सकता है।
dajon

3
आपके सर्वर वातावरण / सेटअप के आधार पर आपको http / https
डेविड

19

यह करने का एक अच्छा तरीका है:

<?php
if (!(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || 
   $_SERVER['HTTPS'] == 1) ||  
   isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&   
   $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'))
{
   $redirect = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
   header('HTTP/1.1 301 Moved Permanently');
   header('Location: ' . $redirect);
   exit();
}
?>

1
अच्छी तरह से चिह्नित एक के रूप में अच्छी तरह से काम करता है कम से कम क्रोम में कई बार एक पुनर्निर्देशित करेगा
थॉमस जे यूंसी

शर्त !(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'हमेशा झूठी होगी, क्योंकि यदि अंतिम भाग सत्य है, तो पहला गलत होगा।
अधिकतम

@ मोम: आप जो कहते हैं वह मुझे नहीं मिलता। यदि दूसरी स्थिति सत्य है ($ _SERVER ['HTTPS'] == 'ऑन') तो पहली शर्त को TRUE होना होगा (बेशक यह कि सर्वर वेरिएबल सेट है, क्योंकि इसमें एक मान है!)
OMA

7

IIS पर PHP के साथ HTTP से HTTPS पर पुनर्निर्देशन

मुझे HTTPS को Windows सर्वर पर काम करने में परेशानी हो रही है जो MS इंटरनेट सूचना सेवाओं (IIS) के संस्करण 6 को चलाता है । मैं लिनक्स होस्ट पर अपाचे के साथ काम करने के लिए अधिक अभ्यस्त हूं इसलिए मैंने मदद के लिए इंटरनेट का रुख किया और जब मैंने "पीएचपी रीडायरेक्ट http से https" के लिए खोज की तो यह उच्चतम रैंकिंग स्टैक ओवरफ्लो प्रश्न था । हालाँकि, चयनित उत्तर मेरे लिए कारगर नहीं था।

कुछ परीक्षण और त्रुटि के बाद, मुझे पता चला कि IIS के साथ, गैर-टीएलएस कनेक्शन के लिए $_SERVER['HTTPS']निर्धारित है off। मैंने सोचा कि निम्नलिखित कोड को किसी अन्य आईआईएस उपयोगकर्ताओं की मदद करनी चाहिए जो खोज इंजन के माध्यम से इस प्रश्न पर आते हैं।

<?php
if (! isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] == 'off' ) {
    $redirect_url = "https://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header("Location: $redirect_url");
    exit();
}
?>

संपादित करें : एक और स्टैक ओवरफ्लो जवाब से , एक सरल समाधान की जांच करना है if($_SERVER["HTTPS"] != "on")


13
@JakeSylvestre मेला काफी यह देखते हुए कि इस प्रश्न को टैग नहीं किया गया है apache, मैंने यह उत्तर अन्य IIS उपयोगकर्ताओं के लाभ के लिए पोस्ट किया था (स्थिति मैं भी ऐसा ही था) जो खोज इंजन के माध्यम से इस पृष्ठ पर आ सकते हैं। मैं इस दृष्टिकोण के लिए सदस्यता लेता हूं कि उत्तर समुदाय के लाभ के लिए हैं, न कि केवल ओपी के लिए।
एंथनी गोगेगन

6

आप हमेशा उपयोग कर सकते हैं

header('Location: https://www.domain.com/cart_save/');

URL बचाने के लिए रीडायरेक्ट करें।

लेकिन मैं इसे .htaccess और Apache नियमों को फिर से लिखने की सलाह दूंगा।


13
मैं हमेशा पुनर्निर्देशन से पहले $ _SERVER ['HTTPS'] की जाँच करने की सलाह दूंगा।
राफेल मिशेल

$ _SERVER ['HTTPS'] हमेशा सेट नहीं किया जाता है, लेकिन पहले जाँच करना एक अच्छा विचार है। यही कारण है कि मैं इसे अपाचे में एक उपयोगी पुनर्लेखन नियम के साथ करने की सलाह देता हूं, जो केवल उस समय पुनर्निर्देशित करता है जब एचटीटीपीएस पर नहीं।
powtac

हालांकि अपाचे एक अतिरिक्त .htaccess फ़ाइल का उपयोग न करने की सलाह देता है (क्योंकि यह धीमा हो जाता है) लेकिन अपाचे के * .conf के अंदर फिर से लिखने के नियमों का उपयोग करने के लिए।
powtac

1

मेरे AWS बीनस्टॉक सर्वर पर, मैं $ _SERVER ['HTTPS'] चर नहीं देखता। मुझे $ _SERVER ['HTTP_X_FORWARDED_PROTO'] दिखाई देते हैं, जो 'http' या 'https' हो सकते हैं, इसलिए यदि आप AWS पर होस्ट कर रहे हैं, तो इसका उपयोग करें:

if ($_SERVER['HTTP_HOST'] != 'localhost' and $_SERVER['HTTP_X_FORWARDED_PROTO'] != "https") {
    $location = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    header('HTTP/1.1 301 Moved Permanently');
    header('Location: ' . $location);
    exit;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.