我在 Apache httpd 中设置了一个子域,它是 Tomcat 服务器的前端,其中 httpd 服务器由 Let's Encrypt 保护。
如果我在 conf 文件中激活以下重写,那么 certbot 将失败。
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
如果我将其注释掉,那么 certbot 就可以工作。
我不太确定,但我认为 100% 一致。当然,使用挑战缓存,在成功续订后整整一个月内我无法获得另一个有意义的测试结果。
答案1
如果我理解正确的话,您希望将所有非 HTTPS 请求重定向到 HTTPS。所以我猜您的重写是在容器中<VirtualHost *:80>
,用于非 HTTPS 站点。
现在您想添加另一个条件,不重定向 Lets Encrypt 挑战。我认为您可能正在使用HTTP-01 挑战,这意味着您不想将请求重定向到http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>
。那么下面的方法有效吗?
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
答案2
另一种方法是,它将重定向 http->https 除 /.well-known 之外的所有内容:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/\.well-known/
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}