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


コメント