web-dev-qa-db-ja.com

PHPを使用したHTTPからHTTPSへのリダイレクト

私はショッピングカートのWebサイトで作業しています。ユーザーが支払いの詳細を入力するときにHTTPSページにリダイレクトし、ログアウトするまで次のページのHTTPS接続を維持したいと思います。

これを行うには、サーバーに何をインストールする必要がありますか(Apacheを使用しています)。また、このリダイレクトをPHPからどのように行うことができますか?

90
Psyche

次のようなものを試してください(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;
}
217
Raphael Michel

これはそれを行う良い方法です。

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

いつでも使用できます

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

保存URLにリダイレクトします。

しかし、.htaccessとApacheの書き換えルールで行うことをお勧めします。

5
powtac

IISでPHPを使用してHTTPからHTTPSにリダイレクトする

MSインターネットインフォメーションサービス(IIS)のバージョン6を実行するWindowsサーバーで動作するようにHTTPSへのリダイレクトを取得できませんでした。 LinuxホストでApacheを操作することに慣れているので、インターネットで助けを求めました。これは「httpからhttpsへのリダイレクト」を検索したときの最高ランクのStack Overflow質問でした。しかし、選択した答えはうまくいきませんでした。

試行錯誤を繰り返した結果、IISでは、非[TLS]接続に対して$_SERVER['HTTPS']offに設定されていることがわかりました。次のコードは、検索エンジン経由でこの質問にアクセスする他のIISユーザーに役立つはずだと思いました。

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

編集:別の Stack Overflow answer から、より簡単な解決策はif($_SERVER["HTTPS"] != "on")をチェックすることです。

5

AWS Beanstalkサーバーで、$ _ 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;
}
0
phoenix