2012-01-17 1 views
0

私が作業しているサイト用のsslがインストールされましたが、明らかにhttpsにリダイレクトされたページ(チェックアウトなど)をいくつか取得する必要があります。PHPでHTTPSにリダイレクトするときのトラブル

私は現在、このコードを使用しています:

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { 
    $url = 'https://www.mysite.php'; 
    header("location: ". $url); 
    exit(); 
} 

Firefoxは、「ページが完了したことがないような方法でリダイレクトしようとしている。」と私に言っています

$ _SERVERのvar_dumpは、セキュリティで保護されているページに[[HTTPS]]などの情報を表示しません。これはNetwork Solutionsの小さなunixパッケージにあります。別のサーバー変数をチェックする必要があるのでしょうか、あるいは私はいくつかのサーバー設定を変更する必要がありますか?

明らかに、スクリプトはHTTPSを見つけられないため、エンドなしでリダイレクトしようとしています。

+0

私は '$ _SERVER ['HTTPS']'はApache固有のものだと思います。彼らはnginxまたは何かを使用している場合は、まったく表示されないことがあります。 – ceejayoz

+0

エンジンを書き換えないのはなぜですか?それはうまくいく。 – rkosegi

答えて

0

あなたがORを使用する場合、それが明確になる:

if (!isset($_SERVER['HTTPS']) OR !$_SERVER['HTTPS']) { 

チャンスが条件の一つは、常にあなたが既にHTTPSモードである場合でも、trueと評価されています。

あなたはANDをしたい:

if (!isset($_SERVER['HTTPS']) AND !$_SERVER['HTTPS']) { 
+0

またはwhat's-his-name's-lawのおかげで、if(!($ _ SERVER ['HTTPS'] OR!$ _ SERVER ['HTTPS'])) ';-) – Tim

+0

これも機能しませんでした。うーん... – absentx

0

私もチェックSSLのこのフォームを使用します。私のために私のコードが動作します。ここで私は何をしています。

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

これはうまく動作し、前のURLにリダイレクトされます。

これが役に立ちます。

+0

残念ながら、これはうまくいきませんでした。 – absentx

+0

_SERVERが存在するかどうかを確認するには、print_r($ _ SERVER);を実行してください。あなたはHttpsを通してアクセスできるページにあります。変数キーHTTPSが設定されているかどうかを確認します。またはあなたがhttpsモードであることを示す鍵を見つけることができれば(現在のスキームを含む現在の場所が格納されている場所キーを取得している可能性がある)、preg_matchを "/^https:\/\/"とhttpsが使用しているかどうかを確認してください。 – prdatur

+0

print_r($ _ SERVER)は、HTTPとHTTPSページの違いは何も表示されません。 – absentx

関連する問題