この記事は約4分で読めます。
本文は約2434文字です
301リダイレクト元のサイトでSSL更新エラーが出る時の回避方法

ドメインを変更して、新旧ドメインで301リダイレクトをしました。
旧ドメイン側で無料SSLが更新できないというメールが届きました。
サーバーはカラフルボックスですので、コンパネはcPanelで、無料SSLはLets encryptになります。
mixhostを利用していた時には同じように301リダイレクトしていても旧ドメイン側の自動SSL更新でエラーが起きたことはありません。
カラフルボックスに移転した後に、今回の問題が発生しました。
認証ファイルへのアクセスもリダイレクトされている模様
SSL更新エラーのログを見ると、.well-known以下のファイルにアクセスしようとして新ドメインに飛ばされているようでした。
.httaccessのリダイレクト処理は以下のコードで行っていました。
Redirect permanent / https://newdomain.com
無条件で全てのアクセスをリダイレクトしてしまうので、.well-known以下にある認証ファイルへのアクセスもリダイレクトされるようです。
言われてみれば、当然なのですが、mixhostでは同じようにしていても問題が無かったので、カラフルボックスに変更したことで起こった事象です。
mixhostはLets Encryptではない無料SSLを使っているので、認証方法が違うのかもしれません。
mixhostでは、SSL証明書世界シェアNo.1のSectigo(旧名:COMODO)を認証局に採用した独自SSLを無料でご利用いただけます。
https://help.mixhost.jp/hc/ja/articles/4407889726617-%E7%84%A1%E6%96%99%E7%8B%AC%E8%87%AASSL%E3%81%AE%E3%81%94%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95-
SSL証明書更新エラー回避方法
リダイレクトするときに、.well-knownだけを除外すればいいハズです。
真面目に、リダイレクト処理を書きつつ、除外する条件を追加してあげれば解決します。
リダイレクトコード
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?olddomain\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/\.well\-known/
RewriteRule ^ https://newdomain.com%{REQUEST_URI} [L,R=301,NE]
リダイレクトコードの説明
RewriteEngine On
: まず、mod_rewrite
を有効にします。これはRewriteRule
やRewriteCond
を使用するために必要な指令です。RewriteCond %{HTTP_HOST} ^(?:www\.)?olddomain\.com$ [NC]
:RewriteCond
は、リダイレクトの条件を指定します。%{HTTP_HOST}
は、リクエストが送信されたホスト名(ドメイン)を表します。^(?:www\.)?olddomain\.com$
は、正規表現で旧ドメインを表現しています。このパターンは、www
があってもなくても、olddomain.com
と一致します。[NC]
は、比較時に大文字小文字を区別しない(case-insensitive)ことを示します。
RewriteCond %{REQUEST_URI} !^/\.well\-known/
:- これはもう一つの条件です。
%{REQUEST_URI}
は、リクエストされたURI(リクエストのパス部分)を表します。 !^/\.well\-known/
は、URIが/.well-known/
から始まらない場合に条件が一致します。これは、/.well-known/
以下のリクエストはリダイレクトの対象外とするための条件です。
- これはもう一つの条件です。
RewriteRule ^ https://newdomain.com%{REQUEST_URI} [L,R=301,NE]
:RewriteRule
は、特定の条件に一致するリクエストを別の場所にリダイレクトするための指令です。^
は正規表現で、リクエストURIの先頭を表します。https://newdomain.com%{REQUEST_URI}
は、リダイレクト先のURLです。リクエストURIはそのまま新しいドメインに付加されます。[L]
は、ルールの終了を示し、他のルールの評価を中断します。[R=301]
は、リダイレクトステータスコード301を返すことを示します。これは永続的なリダイレクトを意味し、検索エンジンなどに新しいドメインへの移行を通知します。[NE]
は、エスケープされていない特殊文字をURIに含めることを示します。通常、URLエンコードされた文字が使用されますが、このオプションを使用することで特殊文字がそのまま保持されます。
まとめ
カラフルボックスでは、SSL証明書の更新エラーが出るため、新旧ドメインのリダイレクトに、Redirect permanent / https://newdomain.com
を使えないことがわかりました。
そのための回避方法としては、以下の作業が必要になります。
Redirect permanent / https://newdomain.com
を使わない.well-known
をリダイレクト対象から除外して、リダイレクトする
コメント