17
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Apacheのリダイレクト(転送)設定、httpからhttpsとか

Last updated at Posted at 2020-05-06
書いてある事

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ファイルに以下を追記します。

/etc/httpd/conf/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行を追記します。

/etc/httpd/conf/httpd.conf
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

次に、ssl.confファイルを編集して、https://www.ドメイン.comhttps://ドメイン.comへリダイレクトします。下の4行を<VirtualHost default:443>タグ内に追記します。
(下は301リダイレクトの場合。302でリダイレクトしたいなら置き換える)

/etc/httpd/conf.d/ssl.conf
# ホスト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へリダイレクトしています。

/etc/httpd/conf/httpd.conf
#ファイルの最後に追加
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アドレスでのアクセスを禁止/リダイレクトする方法

IPアドレスをドメイン名にリダイレクトする方法

httpアクセスをhttpsへ強制リダイレクト(Virtualhost環境下での個別設定)
->二つ目のディレクティブは、バーチャルホストとして定義されていないServerName(例えばIPアドレスなど)でのアクセスは拒否するというものです。

Apache 2.4のhttpとhttpsでIPアドレスや違うFQDNによるアクセスを拒否する

17
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?