是否可以有条件地一次性设置 Apache 协议指令,而不是在所有 VirtualHost 块中设置?

是否可以有条件地一次性设置 Apache 协议指令,而不是在所有 VirtualHost 块中设置?

protocols h2 http/1.1我想知道,除了添加所有 45 个块之外VirtualHost *:443,是否有办法检查适当的条件,然后protocols根据该条件进行设置?我认为,但不能 100% 确定,适当的测试应该是查看请求是否为 https。不过,也许我应该测试端口?

这是我目前得到的,但它不起作用。

Define PROTOCOLS "http/1.1"

<If "%{HTTPS} == 'on'">
    Define PROTOCOLS "h2 http/1.1"
</If>

Protocols ${PROTOCOLS}

编辑

Protocols在目录上下文中不起作用。

编辑2

我只是觉得这不可能,因为Protocols如果指令是全局定义的,就不能像这样动态修改。服务器已经解析了该指令。它已设置。如果我错了,请纠正我。

答案1

文档

协议指令
描述:可用于服务器/虚拟主机的协议
语法:协议协议...
默认:协议 http/1.1
上下文: 服务器配置、虚拟主机

Protocols允许在服务器配置中使用,而不仅限于虚拟主机。只需在 VirtualHost 之外设置一次,即可为整个服务器设置。然后您可以在 VirtualHost 定义中省略它。

一个非常简单的配置是:

# define defaults
Protocols h2 http/1.1

# single VirtualHost for all HTTP redirects
<VirtualHost *:80>
    Protocols http/1.1
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]
</VirtualHost>

# Now all HTTPS VirtualHost definitions
<VirtualHost *:443>
    # ...
</VirtualHost>

相关内容