.htaccessで.well-knownを除外したリダイレクトを設定する方法

目次

概要

旧ドメインから新ドメインに全てリダイレクトしている環境で、.htaccessを利用して、Let’s EncryptなどのSSL証明書発行の認証に使われる.well-knownディレクトリ以下にアクセスできるようにしてみました。

リダイレクトについて

レンタルサーバーで動かしているWebサイトについて、旧ドメインから新ドメインにリダイレクトするようにしています。リダイレクトの方法はいくつかありますが、私が利用しているのは.htaccessに設定を記述する方法です。

.htaccessへの記述は、ApacheのWebサーバーで使うことができる方法です。ほとんどのレンタルサーバーでは、この方法に対応しているため、私はこの方法を便利に使っています。

私がリダイレクトを設定しているのは、ドメインを新しくしたサイトです。ドメインを新しくしたので、古いドメインにアクセスした人を新しいドメインに転送しています。

問題発生

私は、このような環境で私はLet’s Encryptを利用してSSL証明書を発行し、HTTPS接続ができるようにしています。

しかし、Let’s EncryptのようなSSL証明書の発行では、Webサーバー上に認証に用いるファイルを配置して、そこにアクセスできるようにする必要があるため、リダイレクトの設定をしていると、そのファイルにうまくアクセスできないことがあります。

これでは、旧ドメインにHTTPS接続してきた人がブラウザなどからセキュリティの警告を受けてしまい、ちゃんとアクセスすることができません。

そこで、リダイレクトの設定を見直して、Let’s EncryptやアルファSSLなどの認証に使われる.well-known以下のファイルにアクセスできるようにします。

解決方法

.htaccessには、次のように新しいサイトへリダイレクトの設定がされていたとします。RedirectRuleから始まる行に設定が書かれており、new.example.comへリダイレクトするようになっています。

RewriteEngine on
RewriteRule (.*) https://new.example.com/$1 [R=301,L]

この設定について次のように修正します。

RewriteEngine on
RewriteCond %{REQUEST_URI} !(^/\.well-known(.*)$)
RewriteRule (.*) https://new.example.com/$1 [R=301,L]

RewriteCondでは、.well-knownへのアクセスについて、リダイレクトを除外するように記述しています。RewriteCondは、RewriteRuleの上に記述する必要があるので、ご注意ください。

これで、設定は終わりです。SSL証明書の発行時にアクセスする.well-knownへのアクセスはリダイレクトされず、ちゃんと認証ができるはずです。

さいごに

今回の方法で、特定のURLへのアクセスについてリダイレクトを除外するようにできました。

.htaccessで利用しているのは、mod_rewriteというWebサーバーのモジュールです。mod_rewriteはURLを変更したり、リダイレクトしたりできる多機能なものですので、他にも色々なことが可能です。