🛡️

【.htaccess】レンタルサーバーでHTTPSリダイレクトループに苦しめられたときの解決法

に公開

はじめに

この記事は、私が実際に直面した問題をきっかけに執筆しました。私は、Webアプリケーションをレンタルサーバーにアップロードし、HTTPアクセスが正常に動作することを確認した後、SSL証明書を有効化しました。しかし、その後HTTPSリダイレクトを .htaccess で設定した際、リダイレクトループが発生し、想定通りに動作しない問題に直面しました。この記事では、その原因と解決方法について、同様の環境で困っている方に向けて解説します。

.htaccess とは

ApacheというWebサーバーで使える設定ファイルです。特定のディレクトリに置くだけで、そのフォルダ以下のアクセス制御やURLの書き換えなどを行うことができます。

レンタルサーバーでは、サーバー全体の設定に触れられない代わりに、この .htaccess を使ってカスタマイズするのが一般的です。

よくあるリダイレクト設定とその落とし穴

Apacheで .htaccess を使ってHTTPSリダイレクトを設定するのは一般的ですが、HTTPSを強制したいとき、よく以下のような設定が紹介されています。私は、以下の設定が効かずにリダイレクトループにハマっていました。

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

この設定は「HTTPSではないときに、HTTPSにリダイレクトする」という意味です。

ところが、この設定が効かない場合があります。
特に、CDN(クラウド経由の配信サービス)やリバースプロキシ(中継サーバー)を使っている環境では、Apacheが「HTTPでアクセスされたと勘違いしてしまい、HTTPS が常に off のままとなるため、この方法ではリダイレクトがうまく動作しません。

なぜ HTTPS off では正しく動作しないのか?

Apacheの %{HTTPS} は、サーバーがSSL/TLSを直接終端している場合のみ on になります。つまり、以下のような構成では常に off のままです:

[Client] ⇄ [CDN/Proxy (HTTPS)] ⇄ [Apache (HTTP)]

リバースプロキシとは、クライアントとWebサーバーの間に配置される中継サーバーであり、SSL/TLS通信を終端する役割を担う場合もあります。そのため、Apacheは「HTTPでアクセスされている」と誤認してしまうのです。

解決策:X-Forwarded-Proto ヘッダーを使う

このような環境では、リバースプロキシが送信する X-Forwarded-Proto ヘッダーを使って、元の通信がHTTPかHTTPSかを判定するのが正しい方法です。

RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

これは Apache に対し、「クライアントとの通信がHTTPだった場合にだけ、以下のルールを適用する」という意味になります。これにより、リバースプロキシ下でも正しくHTTPSへ誘導できます。

運用上の注意点

  • CDNやロードバランサを使っている場合は、X-Forwarded-Proto ヘッダーを確実に転送する設定になっているかを確認してください。一部のレンタルサーバーやCDNサービスでは、このヘッダーが自動で付かないことがあります。
  • セキュリティ強化のためにも、リダイレクト後はHTTPアクセスを遮断する設定(Apache側のVirtualHostでの制限)を設けると安心です。

まとめ

.htaccess によるHTTPSリダイレクトが効かない場合、環境がリバースプロキシを利用していないかを確認し、X-Forwarded-Proto をチェックしましょう。適切なリダイレクト条件を使うことで、想定通りのHTTPS強制を実現できます。

おわりに

レンタルサーバーにアプリを公開して、「HTTPSにリダイレクトしたらループしてしまう…」という方は、今回紹介した X-Forwarded-Proto を使った設定をぜひ試してみてください。

実際に私もこの問題には数時間悩みましたが、この方法を試したことで、リダイレクトループから無事に抜け出すことができました。本記事が、同じ問題に直面した方の助けになれば幸いです。


参考リンク


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

GitHubで編集を提案

Discussion