mod_rewriteでhttpからhttpsに転送(リダイレクト)する
Contents
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
ディスカッション
コメント一覧
まだ、コメントがありません