書いてある事
Apacheで運用しているWebサイトのリダイレクトを色々と試したので、その時のメモ書きです。
例えば、httpからhttpsへリダイレクトする設定について書いてあるので、既にWebサイトをSSL化してある事が前提です。
主にhttpd.confファイルとssl.confファイルをいじっています。
(*WebサイトをSSL化するにはSSL証明書の導入が必要ですが、正規のSSL証明書で広く使われていて無料のものならLet's Encryptがあります。)
・Let’s EncryptにSSL証明書の取得の申請し、ウェブサイトをSSL化する【無料で初めてのhttps】
・Let’s EncryptのSSL証明書を更新する(手動とcronによる自動更新)
・自己署名ルート証明書(オレオレ証明書)を使ってssl化、httpからhttps、apache
環境
ec2、amazon linux2(centOS7系)
Apache2.4
httpからhttpsへのリダイレクト
全てのhttpアクセスをhttpsへリダイレクトするなら、httpd.confファイルに以下を追記します。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2行目のRewriteCondは、httpsアクセスでないリクエストを表します。
3行目のRewriteRuleは、HTTP_HOSTはサーバーホスト名(ドメイン名)、REQUEST_URIはurlのドメイン以下のパス(頭に/が付く)を表します。
httpからhttpsへのリダイレクトは301でやっています(R=301)。
参考
全ページをSSLにする方法(Apache)
[[Apache] mod_rewriteの使い方・.htaccessでリダイレクトする]
Rewrite (URL書き換え)
->RewriteEngine、RewriteCond、RewriteRuleについて書いてある
(https://agohack.com/mod_rewrite_rule_cond_base/)
->こちらもmod_rewriteモジュールのRewriteEngine、RewriteCond、RewriteRuleについて書いてあります。
httpからhttpsへリダイレクト、かつ、httpsのwwwホストからホストなしへリダイレクト
やりたい事は、下表の3つのリダイレクト元urlにリクエストした時に、リダイレクト先にリダイレクトする。
リダイレクト元(転送元) | リダイレクト先(転送後) |
---|---|
http://www.ドメイン.com http://ドメイン.com https://www.ドメイン.com
|
https://ドメイン.com |
まず、httpd.confファイルを編集して、全てのhttpアクセスをhttpsへリダイレクトする。
下の3行を追記します。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
次に、ssl.confファイルを編集して、https://www.ドメイン.com
をhttps://ドメイン.com
へリダイレクトします。下の4行を<VirtualHost default:443>タグ内に追記します。
(下は301リダイレクトの場合。302でリダイレクトしたいなら置き換える)
# ホストwwwからホスト無しへリダイレクト
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www.ドメイン.com$
RewriteRule ^(.*)$ https://ドメイン.com%{REQUEST_URI} [R=301,L]
http://www.ドメイン.com
からhttps://ドメイン.com
へ直接リダイレクトする
上の設定でも、http://www.ドメイン.com
からhttps://ドメイン.com
へリダイレクトしますが、http://www.ドメイン.com
->https://www.ドメイン.com
->https://ドメイン.com
と、リダイレクトを2回しています。
これでも別に構わないと思いますが、直接リダイレクトする設定をしてみます。
1つ目のVirtualHostタグは、www.ドメイン.com以外のhttpアクセスをhttpsへリダイレクトし、2つ目のVirtualHostタグで、http://www.ドメイン.com
からhttps://ドメイン.com
へリダイレクトしています。
#ファイルの最後に追加
RewriteEngine on
<VirtualHost *:80>
ServerName any
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
<VirtualHost *:80>
ServerName www.ドメイン.com
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://ドメイン.com%{REQUEST_URI} [R=301,L]
</VirtualHost>
その他の参考サイト
httpからhttpsにリダイレクト、www有無のリダイレクト方法(mod_rewrite)
WEBサーバー(Apache)で直IPアドレスでのアクセスを禁止/リダイレクトする方法
httpアクセスをhttpsへ強制リダイレクト(Virtualhost環境下での個別設定)
->二つ目のディレクティブは、バーチャルホストとして定義されていないServerName(例えばIPアドレスなど)でのアクセスは拒否するというものです。