ハジメトーク最新記事

ハジメクリエイト社員による、日々の業務やトレンド、日常のアレコレについてお届けします。

もっと見る

【Laravel】無料独自SSL設定でハマった時の解決策

2025.03.05

どうもこんにちは塚本です。

この記事では、エックスサーバー(シンレンタルサーバー、スターサーバーも同様)のドキュメントルートにLaravelを設置したサイトに、無料独自SSLを設定する際にハマってしまった方向けに、解決策を紹介します。

私自身、同様の問題に直面し、解決に時間を要しました。
本記事が、同じような状況でお困りの方の助けになれば幸いです。

TL;DR

  • Laravelのドキュメントルートに.htaccessを設置しない。
  • 設置する場合は、HTTP-01チャレンジの通過設定を追記する。

無料独自SSL設定が通らない原因

(今回のパターンに限ります)
エックスサーバーで無料独自SSL設定が通らない主な原因は、以下の通りです。

公開ディレクトリとLaravelの公開ディレクトリの差異

  • エックスサーバーの標準的な公開ディレクトリは、「$HOME/サーバーID/ドメイン名/public_html」です。
  • 一方、Laravelのデフォルト公開ディレクトリは「public」です。
  • そのため、通常は「$HOME/サーバーID/ドメイン名/public_html/public」にLaravelのファイルが配置されます。

.htaccessによるリダイレクト

公開ディレクトリが違うため、このままではドメイン名にアクセスしてもLaravelは動きません。

したがって、「$HOME/サーバーID/ドメイン名/public_html」に.htaccessを設置してドメイン名へのアクセスを「$HOME/サーバーID/ドメイン名/public_html/public」へリダイレクトさせていました。

今回のケースでは、これが直接の原因でした。

Let’s Encryptの無料独自SSL設定について

Let’s Encryptは、Webサイトの所有者であることを確認するために、主にHTTP-01チャレンジを行います。

HTTP-01チャレンジとは

ドメインのルートディレクトリにある /.well-known/acme-challenge/ ディレクトリに特定のファイルを配置し、そこに HTTP でアクセスすることでドメインの所有権を確認する手法です。
サーバの管理画面で無料独自SSL設定を行うと、自動で該当ディレクトリが作成され、HTTP-01チャレンジを受け付けるようです。

追加した.htaccessが邪魔していた

しかし、僕が追記した.htaccessのせいですべてのリクエストが public ディレクトリにリダイレクトされるため、Let’s Encrypt が検証ファイルを正常に読み込めていなかったようです。

対処法

# Let's Encrypt の認証を許可
RewriteRule ^\.well-known/acme-challenge/ - [L]

こちらの記述を.htaccessに追記し、HTTP-01チャレンジを妨げないようにすると無料独自SSL設定の更新ができました。

まとめ

初歩的なトラブルですが、灯台もと暗しという感じで全く気付けませんでした。
Let’s Encrypt側の問題だろうと放置していたのですがあまりに更新できないので「もしや・・・?」と思い気付いた感じです。

繰り返しになりますが、本記事が、同じような状況でお困りの方の助けになれば幸いです。

この記事を書いた人

Sho Tsukamoto

Chief Engineer Sho Tsukamoto

2023年4月入社。Web職人のたまごです。 最近はもっぱらコーディングすることは少なく、LaravelやReact Nativeを用いたシステム開発をメインとしています。

Sho Tsukamotoの書いた記事一覧へ

ハジメクリエイトでは一緒に働く仲間を募集しています!

関連記事