0

官方 Apache httpd 文档建议不要使用 mod_rewrite 在域上强制执行 SSL。相反,首选使用来自 mod_alias 的 Redirect 指令。

以下假设的虚拟主机配置

  • 强制 https
  • 强制执行非 www URI(s)
  • 由于permanentstatus 参数,在浏览器上缓存重定向。
# Declare virtual host for http requests
<VirtualHost *:80>
    
    # Declare name-based host
    ServerName example.com
    
    # Declare redirection to https://example.com/ utilizing mod_alias
    Redirect permanent "/" "https://example.com/"

</VirtualHost>

http://example.com/.well-known/acme-challenge/问题:这也会重定向对URI 的请求。

这是一个问题,因为尽管Let's Encrypt 支持通过使用 SSL url 执行挑战,即使 SSL 证书损坏,我使用的 ACME 客户端也不支持。

如何.well-known/acme-challenge/从 中排除目录Redirect

我在此页面上找到了一条线索:Apache HTTP Server 中的表达式

显示了以下示例代码片段。

# Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
    Redirect permanent "/" "http://www.example.com/"
</If>

所以我尝试了以下方法:

# Declare virtual host for http requests
<VirtualHost *:80>
    
    # Declare name-based host
    ServerName example.com
    
    # Declare redirection to https://example.com/ utilizing mod_alias
    # Exclude 
    <If "%{REQUEST_URI} != '!^\/\.well-known\/.*$'">
        Redirect permanent "/" "https://example.com/"
    </If>

    # Utilize a single .well-known/acme-challenge directory across all domains
    Alias "/.well-known/acme-challenge/" "/var/www/ssl.com/"
    
    # Declare the /var/www/ssl.com directory
    <Directory /var/www/ssl.com>
        Options None
        AllowOverride None
        ForceType text/plain
    </Directory>

</VirtualHost>

不幸的是,这似乎不起作用,我做错了什么?

我在 RHEL 8 上运行 Apache httpd 2.4

4

0 回答 0