mod_rewriteでhttpからhttpsに転送(リダイレクト)する

mod_rewriteでHTTPからHTTPS(SSL)にリダイレクト

無料のSSL証明書「Let’s Encrypt」が普及してきているので、サイトをHTTPからHTTPSのSSL対応をしているサイトが増えてきていると思います。SSL化してHTTPSに対応しても、httpからアクセスはあると思うので、httpからのアクセスhttpsに転送する必要があります。この転送(リダイレクト)をmod_rewriteを利用して対応しようと思います

「.htaccess」を利用してSSLに転送する

リダイレクトの方法ですが「.htaccess」とApacheの設定ファイル(ssl.conf)などを利用するケースがあると思います。

下記では「.htaccess」を利用して、httpからhttpsへのリダイレクトしています。
「http://example.com」のhttpサイトにアクセスがあると、mod_rewritedで転送され「https://example.com」にリダイレクトされます。

$ vi .htaccess

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

apacheの設定ファイル「ssl.conf」でSSLに転送する

先程は「.htaccess」で対応しましたが、「.htaccess」を利用せずApacheの設定ファイルに直接記述して対応するケースも紹介します。

下記の設定では、「/etc/httpd/conf/vhosts/example.com.conf」というVirtualHostの設定をしている設定ファイルに、httpからhttpsへのリダイレクトする設定を追加しています。

転送の箇所は、<ifModule mod_rewrite.c> 〜 </ifModule>で囲った箇所がリダイレクトの設定です。設定ファイルを変更後はApacheのリロードか再起動を忘れないこと

$ sudo vim /etc/httpd/conf/vhosts/example.com.conf
<VirtualHost xxx.xxx.xxx.xxx:80>
  DocumentRoot /var/www/vhost/example.com/html
  ServerName example.com
  ErrorLog /var/www/vhost/example.com/log/example-error.log
  TransferLog /var/www/vhost/example.com/log/example-access.log

# httpからhttpsに転送設定
  <ifModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
  </ifModule>

  <Directory /var/www/vhost/example.com/html>
    AllowOverride FileInfo AuthConfig Limit
    Options ExecCGI FollowSymLinks
    Require all granted
  </Directory>
</VirtualHost>

#設定反映のためにApacheの再起動かリロードすること
$ sudo systemctl restart httpd

 

スポンサーリンク