Apache 条件付き HTTP から HTTPS へのリダイレクト

Apache 条件付き HTTP から HTTPS へのリダイレクト

すべて。構文に問題があります。他のソースに従ってみましたが、うまくいきません。

無条件HTTPからHTTPSへのリダイレクトを作成しました。http://www.robjvargas.com、HTTPS に行き着きます。それですべて順調です。

しかし、今では私の証明書には HTTP が必要なようです。Let's Encrypt を使用しているため、90 日ごとに更新する必要があります。リダイレクトを有効にすると、ドライ ランは失敗します。リダイレクトを無効にすると、ドライ ランは成功します。

そこで、証明書更新トラフィックを除外するために RewriteCond を挿入してみました。

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

ただ、うまくいきません。一度見たら額を叩かれるような何かを見逃していると思うのですが、見ていません。上記のコードでは、HTTP から HTTPS へのリダイレクトは依然として普遍的であるように見えます。したがって、明らかに、RewriteCond は間違っています。URI の前のピリオドが間違っている可能性がありますが、それありとなしの両方を試しました。

また、完全な URI を RewriteCond に入力しましたが、それでも免除されませんでした。

近づいています。エラーは発生しません。ただ、意図した条件が満たされないだけです。

何が足りないのでしょうか?

答え1

しかし、今では私の証明書には HTTP が必要なようです。

これは正確ではありません。私は個人的に https 経由で更新しています。ただし、これが機能するためには、http 仮想ホストから関連部分をコピーして、https 仮想ホストのチャレンジ URI へのアクセスを許可する必要があります。それができない、またはしたくない場合は、書き始めた条件付きリダイレクトを使用して http 経由で機能させる方法を次に示します。

問題は、現在の正規表現がチャレンジURIに一致することです。Apache ドキュメントREQUEST_URI は / で始まるので、チャレンジ URI は次のように探す必要があります。^\/\.well-known\/.*$これはチャレンジ URI (http://example.com/.well-known/acme-challenge)。

すべてをまとめると:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

将来トラブルが発生した場合は、これを使用してください:htaccess テスター

答え2

私の Virtualmin サーバーでは、次の行でうまくいきました。

RedirectMatch ^/(?!.well-known)(.*)$ https://phpmyadmin.example.com/$1

関連情報