我在 apache httpd conf 文件中进行了重写,这会破坏 certbot。有没有办法更改它,让它不受影响?

我在 apache httpd conf 文件中进行了重写,这会破坏 certbot。有没有办法更改它,让它不受影响?

我在 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}

相关内容