পিএইচপি দিয়ে এইচটিটিপি থেকে এইচটিটিপিএসে পুনর্নির্দেশ করা হচ্ছে


107

আমি একটি শপিং কার্ট ওয়েবসাইটে কাজ করছি এবং আমি যখন তার বিলিংয়ের বিশদটি প্রবেশ করানো হয় এবং লগ আউট না করা অবধি পরবর্তী পৃষ্ঠাগুলির জন্য এইচটিটিপিএস সংযোগ বজায় রাখি তখন আমি HTTPS পৃষ্ঠায় ব্যবহারকারীকে পুনর্নির্দেশ করতে চাই।

এটি করার জন্য সার্ভারে আমি কী ইনস্টল করতে হবে (আমি অ্যাপাচি ব্যবহার করছি) এবং কীভাবে এই পিএইচপি থেকে পুনঃনির্দেশ করা যেতে পারে?

উত্তর:


247

এই জাতীয় কিছু চেষ্টা করুন (অ্যাপাচি এবং আইআইএসের জন্য কাজ করা উচিত):

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 'উপাদান নেই যার কারণে এটি' অনেক বেশি পুনঃনির্দেশ 'ত্রুটি দিচ্ছিল। অন্যান্য পদ্ধতি ব্যবহার করা প্রয়োজন।
উসমান জহির 16

5
if( $_SERVER['HTTPS'] == "off")এই কোডটি কাজ করতে আমাকে পরীক্ষা করতে হয়েছিল। আমি মনে করি এটি কারণ আমি আইআইএস এ আছি, ওপির মতো অ্যাপাচি নয়।
নিক পিকারিং

1
@ নিকোলাস পিকারিং জ্যাপ, ser _SERVER ভেরিয়েবলগুলি ওয়েব সার্ভারগুলির সাথে পরিবর্তিত হতে পারে।
রাফেল মিশেল

6
দ্রষ্টব্য: বাকী পৃষ্ঠাটি কার্যকর করতে (এবং সম্ভবত ক্লায়েন্টকে অতিরিক্ত তথ্য প্রেরণ করা) আটকাতে (অর্থাৎ হ্যাকার বা ব্রাউজারগুলিতে যা শিরোনামকে সম্মান করে না) রোধ করতে হেডার পুনর্নির্দেশের পরে ডাই () বা প্রস্থান () প্রস্থান করা গুরুত্বপূর্ণ হতে পারে।
dajon

3
আপনার সার্ভারের পরিবেশ / সেটআপের উপর নির্ভর করে আপনাকে http / https চেক করতে $ _SERVER ['HTTP_X_FORWARDED_PROTO'] ব্যবহার করতে হতে পারে
ডেভিড মিস্টার

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
ভাল হিসাবে চিহ্নিত হিসাবে কাজ করে যা কমপক্ষে Chrome এ অনেক বার পুনর্নির্দেশ ফিরিয়ে দেবে
টমাস জ ইউনসি

শর্তটি !(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on'সর্বদা মিথ্যা হবে, যেহেতু শেষ অংশটি সত্য হয় তবে প্রথমটি মিথ্যা হবে।
সর্বাধিক

@ ম্যাক্স: আপনার বক্তব্য আমি পাই না। দ্বিতীয় শর্তটি যদি সত্য হয় ($ _SERVER ['HTTPS'] == 'চালু') তবে প্রথম শর্তটিও সত্য হতে হবে (অবশ্যই সার্ভারের ভেরিয়েবল সেট করা আছে, কারণ এতে একটি মান রয়েছে!)
ওএমএ

7

আইআইএসে পিএইচপি দিয়ে এইচটিটিপি থেকে এইচটিটিপিএসে পুনর্নির্দেশ করা হচ্ছে

এমএস ইন্টারনেট ইনফরমেশন সার্ভিসেস (আইআইএস) এর 6 সংস্করণ চালিত উইন্ডোজ সার্ভারে কাজ করতে HTTPS এ পুনঃনির্দেশ পেতে আমার সমস্যা হয়েছিল । আমি লিনাক্স হোস্টে অ্যাপাচি-র সাথে আরও কাজ করতে অভ্যস্ত তাই আমি সাহায্যের জন্য ইন্টারনেটে পরিণত হয়েছিলাম এবং যখন "পিএইচপি পুনঃনির্দেশ HTTP টি https" অনুসন্ধান করেছি তখন এটি ছিল সর্বোচ্চ র‌্যাঙ্কের স্ট্যাক ওভারফ্লো প্রশ্ন was । তবে নির্বাচিত উত্তরটি আমার পক্ষে কার্যকর হয়নি।

কিছু পরীক্ষা এবং ত্রুটির পরে, আমি আবিষ্কার করেছি যে আইআইএসের সাথে, টি-টিএলএস নন সংযোগের জন্য $_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
@ জ্যাকসাইলভেস্টের ফেয়ার যথেষ্ট। এই প্রশ্নটি হিসাবে ট্যাগ করা হয়নি apache, আমি এই উত্তরটি অন্য আইআইএস ব্যবহারকারীদের (আমি যে পরিস্থিতিতে ছিলাম তার অনুরূপ) সুবিধার জন্য পোস্ট করেছি যারা অনুসন্ধান পৃষ্ঠার ইঞ্জিনের মাধ্যমে এই পৃষ্ঠাটি জুড়ে আসতে পারে। আমি এই মতামতটিতে সাবস্ক্রাইব করেছি যে উত্তরগুলি কেবল ওপি নয়, পুরো সম্প্রদায়ের সুবিধার জন্য।
অ্যান্টনি জিওগিগান

6

আপনি সর্বদা ব্যবহার করতে পারেন

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

সেভ ইউআরএলে পুনর্নির্দেশ করতে।

তবে আমি .htaccess এবং অ্যাপাচি পুনরায় লেখার নিয়মগুলি দ্বারা এটি করার পরামর্শ দেব।


13
আমি সর্বদা পুনর্নির্দেশের আগে $ _SERVER ['HTTPS'] পরীক্ষা করার পরামর্শ দিই।
রাফেল মিশেল

। _SERVER ['HTTPS'] সর্বদা সেট করা থাকে না তবে এটি আগে পরীক্ষা করা ভাল। আমি কেন এটি অ্যাপাচে একটি দরকারী পুনর্লিখনের নিয়ম দিয়ে করার পরামর্শ দিচ্ছি, যা HTTPS এ না থাকলে কেবল পুনঃনির্দেশ করে।
Powtac

যদিও অ্যাপাচি অতিরিক্ত .htaccess ফাইলটি ব্যবহার না করার পরামর্শ দেয় (কারণ এটি ধীর হয়ে যায়) তবে অ্যাপাচের * .conf এর ভিতরে পুনর্লিখনের নিয়মগুলি ব্যবহার করার জন্য।
Powtac

1

আমার AWS বিনস্টাল সার্ভারে, আমি $ _SERVER ['HTTPS'] পরিবর্তনশীল দেখতে পাচ্ছি না। আমি $ _SERVER ['HTTP_X_FORWARDED_PROTO'] দেখতে পাচ্ছি যা 'HTTP' বা 'https' হতে পারে তাই আপনি যদি এডাব্লুএসে হোস্টিং করছেন তবে এটি ব্যবহার করুন:

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.