我基本上试图redirect每个请求:443到:443。 我发现这种方式可以做到这一点,这很好,一旦访问者放弃了SSL警报(当然,我的证书对我的IP无效),他被正确地redirect了:
<VirtualHost *:443> SSLEngine off ServerAdmin [email protected] ServerName 11.11.11.11 Redirect Permanent / https://domain.eu/ </VirtualHost>
但是我今天在服务器上启用了IPv6,所以我想redirect它,但是问题从这里开始。
<VirtualHost *:443> SSLEngine off ServerAdmin [email protected] ServerName [ff:ff:8:ff::1] //(with or without '[]') Redirect Permanent / https://domain.eu/ </VirtualHost>
它根本不会工作。 我不确定是否因为在ServerName参数中缺less对IPv6的支持,但我有点卡住了。
你有什么主意吗 ? 谢谢 !
据我所知,ServerName指令不允许IPv6地址。
它不会接受括号和IPv6地址的冒号字符。
该格式仅适用于Listen,NameVirtualHost和VirtualHost指令。
根据您的configuration(即:如果您在同一个Apache安装中服务多个域),您可以尝试以下操作。
通常情况下创build一个虚拟主机,而不是定义一个具有IPv6地址的ServerName,而是使用合适的dns名称(不一定真的存在)来定义它。
现在的诀窍就是把这个虚拟主机放在那个IP:端口的其他虚拟主机之上。
这样,当一个用户请求一个域名(或者你的情况下的IP)时,它不会被Apache处理,它会尝试通过使用它为该IP:端口find的第一个VirtualHost来服务请求。
首先,'['和']'对DNS命名约定无效,必须在ServerName值中实现。 其次,':'也是无效的 – 所以尽量不要使用符号或使用主机名 – 第二种方法更好。
你尝试过吗?
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>
根据监听地址处理请求。