私の環境だと正常にサイトにアクセスできなくなったため×
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
参考サイト:https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?id=786
この環境の設定(ALBやリバースプロキシがある環境)
# AWS ALBからHTTPリスナーの場合、
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
この行は、リクエストがHTTPSではない(すなわち、HTTPで送信されている)場合に次のルールを適用する条件を定義しています。
!=on は「HTTPSが有効ではない(onではない)」ことを意味します。
AWSのALBは、リクエストがプロキシを経由して送信される場合、X-Forwarded-Protoヘッダーに「リクエストがHTTPなのかHTTPSなのか」を示す情報を付与します。この行は、このヘッダーがhttpsでない場合に次のルールを適用する条件を定義しています。
X-Forwarded-Proto が https でない場合、リダイレクトを行います。
RewriteRule:実際にリクエストのリダイレクトを行うルールを定義します。
^/?(.):^/?は、リクエストURLの先頭がスラッシュ(/)かどうかを意味し、(.)はURLの残りの部分をキャプチャします。
https://%{HTTP_HOST}/$1:%{HTTP_HOST}はリクエストのホスト名(ドメイン名)を取得し、$1はキャプチャされたURLの残りの部分を挿入します。この結果、HTTPリクエストが https:// にリダイレクトされます。
[R,L]:
R はリダイレクトを意味し、R=301であればリダイレクトが永続的(301 Moved Permanently)になりますが、指定がなければ一時的なリダイレクト(302 Found)になります。
L は「これが最後のルールである」という意味です。これにより、リクエストがこのルールに一致すると、それ以上のルールは評価されません。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
参考サイト:https://qiita.com/matsu_qiita/items/67558d36a6b825d80645
.htaccess はサーバ管理者による設定 ( httpd.conf とそこから Include される種々の設定ファイル ) を、コンテンツ管理者が(一部)上書きできる仕組みです。
参考サイト:https://teratail.com/questions/132592
.htaccessが複数ある場合
参考サイト:https://bluegoat.jp/blog/htaccess-priority-area/
.htaccess ファイル(分散設定ファイル)は、サーバの挙動を決定する設定ファイルのひとつで、ウェブサーバとして「Apache」が使用されていて、サーバ管理者が「.htaccess」ファイルの設置を許可していれば使用可能です。
通常 Apache は、httpd.conf というテキストファイルにディレクティブ(命令、コマンドのこと)と呼ばれる専用の命令を記述することで設定しますが、httpd.conf はサーバ管理者しか編集できません。それに対して、.htaccess ファイルは各ユーザが、各ディレクトリ単位で設定することができます。
.htaccess ファイルを設置すると、アクセス制限やユーザー認証、リダイレクト(自動転送)、404エラーページのカスタマイズなどを設定することができます。
参考サイト:https://www.webdesignleaves.com/pr/html/htaccess.html
Qiitaの記事では.htaccessではなくhttpd.confでの制限を推奨しているようだ。
参考サイト:https://qiita.com/sanogemaru/items/7e5bd6e8dc9b04c9978e