我基本上是想将 :443 上的每个请求重定向到 :443。我发现这种方法效果很好,一旦访问者放弃 SSL 警报(当然,我的证书对我的 IP 无效),他就会被正确重定向:
<VirtualHost *:443>
SSLEngine off
ServerAdmin [email protected]
ServerName 11.11.11.11
Redirect Permanent / https://domain.eu/
</VirtualHost>
但是我今天在我的服务器上启用了 IPv6,所以我也想重定向它,但问题就从这里开始。
<VirtualHost *:443>
SSLEngine off
ServerAdmin [email protected]
ServerName [ff:ff:8:ff::1] //(with or without '[]')
Redirect Permanent / https://domain.eu/
</VirtualHost>
它根本行不通。我不确定这是否是因为 ServerName 参数中缺少对 IPv6 的支持,但我有点不知所措。
您有什么想法吗?谢谢!
答案1
据我所知,ServerName 指令不允许使用 IPv6 地址。
它不接受 IPv6 地址的括号和冒号。
该格式仅对 Listen、NameVirtualHost 和 VirtualHost 指令有效。
根据您的配置(即:如果您在同一个 Apache 安装上服务多个域),您可以尝试以下操作。
像平常一样创建一个虚拟主机,而不是使用 IPv6 地址定义 ServerName,而是使用正确的 DNS 名称(不必真正存在)来定义它。
现在的诀窍是将此虚拟主机置于该 IP:Port 的每个其他虚拟主机之上。
这样,当用户请求 Apache 未处理的域(或您的情况中的 IP)时,它将尝试使用为该 IP:Port 找到的第一个 VirtualHost 来满足该请求。
答案2
首先,“[”和“]”对于 DNS 命名约定无效,必须在 ServerName 值中满足这些约定。其次,“:”也无效 - 因此请尝试在不使用那些符号的情况下使用它,或者使用主机名 - 第二种方法更好。
答案3
你尝试过这个吗?
Listen [ff:ff:8:ff::1]:80;
<VirtualHost [ff:ff:8:ff::1]:443>
SSLEngine off
ServerAdmin [email protected]
Redirect Permanent / https://domain.eu/
</VirtualHost>
根据监听地址处理请求。