-1

sign-in.php または register.php ページが HTTP 経由でアクセスされている場合は HTTPS にリダイレクトしたいという PHP の if/else ステートメントが必要です。たとえば、ユーザーが制限されたページ ( http://domain.com/my-account.php ) にアクセスしようとすると、サイトはユーザーをhttp://domain.com/sign-in.php?redirect=my-にリダイレクトします。アカウントですが、ページをhttps://domain.com/sign-in.php?redirect=my-accountにリダイレクトしたいと思います。

http の代わりに https を含めるようにヘッダー リダイレクトを変更するだけでよいことはわかっていますが、ユーザーはhttp://domain.com/sign-in.php?redirect=my-accountと入力する可能性があるため、サインイン (またはその他) は https 経由で発生します。

どんな助けでも大歓迎です

4

5 に答える 5

4

どうぞ。

//force the page to use ssl 
if ($_SERVER["SERVER_PORT"] != 443) {
    $redir = "Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    header($redir);
    exit();
}

$_SERVER、ヘッダー、パス、スクリプトの場所などの情報を含む配列です。

于 2013-03-19T21:19:23.297 に答える
0

$_SERVER、具体的には「SERVER_PROTOCOL」に対してチェックできます

http://php.net/manual/en/reserved.variables.server.php

于 2013-03-19T21:18:57.473 に答える
0

すべてのページで常に実行されるコードの一部が必要です。MVC では、ベース コントローラーにあります。他のデザインでは、すべてのページに init.php ファイルが含まれる場合があります。

このファイルには、HTTPS を必要とするページのホワイトリストがあります。

$requires_https = array(
    'sign-in.php' => TRUE,
    'register.php' => TRUE
);

次に、要求されたページを特定する必要があります。

$url_info = pathinfo($_SERVER['REQUEST_URI']);
$page = $url_info['filename'];

次に、HTTP または HTTPS のどちらを使用しているかを確認します

$is_secure = ! empty($_SERVER['HTTPS']);

最後に、チェックを行うことができます:

if (isset($requires_https[$page]) AND ! $is_secure)
    header('Location: https://www.yoursite.com/' . $page);
elseif ( ! isset($requires_https[$page]) AND $is_secure)
    header('Location: http://www.yoursite.com/' . $page); 

これは、カスタム リダイレクト関数と、安全かどうかのオプションを取り込んで適切な URL を構築する site_url 関数を使用することで、最後の部分で確実に改善される可能性があります。

誰かが HTTPS でネットサーフィンをしていても、一般的には問題にならないことに注意してください。実際、Google のサービスのほとんどは HTTPS であり、インターネット接続が改善されれば、ネットサーフィンは最終的にすべて HTTPS で行われるようになります。安全であるべきページが安全であることを確認することだけが重要であり、安全である必要のないページが安全でないことを確認することは重要ではありません。

于 2013-03-19T21:31:27.370 に答える
0

(より) 完全なメソッド: (クエリ文字列を含む)

https 上にあるかどうかを確認するには:

$secure = (!empty(filter_input(INPUT_SERVER, 'HTTPS')) &&
  filter_input(INPUT_SERVER, 'HTTPS') !== 'off') ||
  filter_input(INPUT_SERVER, 'SERVER_PORT') == 443;

https://stackoverflow.com/a/2886224に従って

次に、リダイレクトしてクエリ文字列を含めます。

if($secure){
  header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}

REQUEST_URIの代わりに使用するPHP_SELFと、クエリ パラメータ ( ?URL の の後のもの) が含まれます。

そしていつものように、ユーザー入力(これらを含む)をなどでフィルタリングしますfilter_input()

于 2016-12-05T19:04:02.587 に答える
0
if ($_SERVER['SERVER_PORT'] != 443) {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
   exit();
}

init クラス / スクリプトの一部を使用する - コードを実行して、このページが事前に SSL を必要とするかどうかを確認できますが、これは SSL へのリダイレクトを強制する実際のコードです (REQUEST_URI は正しいパスを取得するためにディレクトリなどを提供します)。 .

単一ページでの使用 (つまり、サインインと登録) - これにより、ユーザーは SSL でこのページにリダイレクトされます (このコードを上部近くに置きます)。

301 Moved Permanently は、ネガティブな SEO も防ぎます。

于 2015-12-02T09:59:30.740 に答える