1. ホーム
  2. php

[解決済み】.htaccessとmod_rewriteで強制的にSSL/https化する。

2022-04-01 11:57:19

質問

PHPで.htaccessとmod_rewriteのページ指定を使って強制的にSSL/httpsにするにはどうすればよいですか?

どのように解決するのですか?

Apacheの場合は mod_ssl で強制的にSSL化します。 SSLRequireSSL Directive :

このディレクティブは、現在の接続で HTTP over SSL (すなわち HTTPS) が有効になっていない限り、アクセスを禁止します。これは、SSL が有効なバーチャルホストやディレクトリの中で、 保護されるべきものを公開してしまう設定ミスから守るために非常に便利です。このディレクティブがあるときは、SSL を使っていないすべてのリクエストは拒否されます。

しかし、これではhttpsへのリダイレクトはできません。リダイレクトさせるには、以下のように mod_rewrite を .htaccess ファイルに記述してください。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

で紹介されているような様々なアプローチがあります。

プロバイダが.htaccessを無効にしている場合、PHPから解決することもできます(あなたが要求しているので、それはあり得ませんが、とにかく)。

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
    if(!headers_sent()) {
        header("Status: 301 Moved Permanently");
        header(sprintf(
            'Location: https://%s%s',
            $_SERVER['HTTP_HOST'],
            $_SERVER['REQUEST_URI']
        ));
        exit();
    }
}