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


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

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


76
2018-02-24 14:57


मूल




जवाब:


इस तरह कुछ कोशिश करें (अपाचे और आईआईएस के लिए काम करना चाहिए):

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

181
2018-02-09 16:22



यह हमेशा काम नहीं करता है। मैंने इसका उपयोग करने की कोशिश की और $ _SERVER सरणी में कोई 'https' तत्व नहीं था जिसके कारण यह 'बहुत सारे रीडायरेक्ट' की त्रुटि दे रहा था। अन्य विधि का उपयोग करने की आवश्यकता होगी। - Usman Zaheer
मुझे परीक्षण करना पड़ा if( $_SERVER['HTTPS'] == "off") इस कोड को काम करने के लिए। मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं आईआईएस पर हूं, ओपे की तरह अपाचे नहीं। - Nicholas Pickering
@ निकोलस पिकरिंग जेपीपी, वेबसेवर के साथ $ _SERVER चर बदल सकते हैं। - Raphael Michel
नोट: शेष पृष्ठ को निष्पादित करने से रोकने के लिए हेडर रीडायरेक्ट के बाद डालना () या बाहर निकलना महत्वपूर्ण हो सकता है (यानी संभवतः क्लाइंट को अतिरिक्त जानकारी भेजना) (यानी हैकर या ब्राउज़र जो हेडर का सम्मान नहीं कर सकते हैं)। - user2533809
आपके सर्वर पर्यावरण / सेटअप के आधार पर आपको http / https की जांच करने के लिए $ _SERVER ['HTTP_X_FORWARDED_PROTO'] का उपयोग करने की आवश्यकता हो सकती है - David Meister


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

<?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();
}
?>

9
2018-02-24 14:59



अच्छी तरह से काम करता है जो अच्छी तरह से चिह्नित किया गया है कम से कम क्रोम में रीडायरेक्ट को कई बार वापस कर देगा - Thomas J Younsi


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

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

सहेजें यूआरएल पर रीडायरेक्ट करने के लिए।

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


5
2017-11-27 18:04



मैं हमेशा पुनर्निर्देशन से पहले $ _SERVER ['HTTPS'] जांचने की अनुशंसा करता हूं। - Raphael Michel
$ _SERVER ['HTTPS'] हमेशा सेट नहीं होता है, लेकिन पहले जांचना एक अच्छा विचार है। Thats क्यों मैं Apache में एक उपयोगी पुनर्लेखन नियम के साथ ऐसा करने की सलाह देता हूं, जो केवल HTTPS पर नहीं होने पर रीडायरेक्ट करता है। - powtac
हालांकि अपाचे एक अतिरिक्त .htaccess फ़ाइल का उपयोग न करने की सिफारिश करता है (क्योंकि यह धीमा हो जाता है) लेकिन अपाचे के * .conf के अंदर पुनर्लेखन नियमों का उपयोग करने के लिए। - powtac


आईआईएस पर PHP के साथ HTTP से HTTPS पर रीडायरेक्ट करना

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

कुछ परीक्षण और त्रुटि के बाद, मैंने पाया कि आईआईएस के साथ, $_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")


3



ठीक है ... लेकिन ओप ने कहा कि वह अपाचे का उपयोग कर रहा था - Jake Sylvestre
@ जेकसिल्वेस्टर मेला पर्याप्त है। यह देखते हुए कि इस प्रश्न को टैग नहीं किया गया है apache, मैंने अन्य आईआईएस उपयोगकर्ताओं (जिस स्थिति में मैं था) के लाभ के लिए यह उत्तर पोस्ट किया जो खोज इंजन के माध्यम से इस पृष्ठ पर आ सकता है। मैं इस विचार की सदस्यता लेता हूं कि उत्तर पूरी तरह से समुदाय के लाभ के लिए हैं, न सिर्फ ओपी। - Anthony Geoghegan