我配置了一个域和两个子域,并重定向到相应的 https 版本:
<VirtualHost *:80>
ServerName domain.com
Redirect permanent / https://domain.com
</VirtualHost>
<VirtualHost *:80>
ServerName a.domain.com
Redirect permanent / https://a.domain.com
</VirtualHost>
<VirtualHost *:80>
ServerName b.domain.com
Redirect permanent / https://b.domain.com
</VirtualHost>
现在,我做一些测试:
curl http://domain.com/ gives me the redirect to https://domain.com/
curl http://a.domain.com/ gives me the redirect to https://a.domain.com/
curl http://b.domain.com/ gives me the redirect to https://b.domain.com/
太棒了。最后一个测试,只使用 IP (abcd):
curl http://a.b.c.d/ gives me the redirect to https://a.domain.com/
它采用来自域名的重定向a.domain.com
。
如果用户请求,是否有任何更改可以禁用 HTTP/HTTPS http://a.b.c.d/
?目前,我添加了一个重定向到主域,其中 HTTPS 版本具有自签名证书(因为它只是 IP):
<VirtualHost *:80>
Redirect permanent / https://domain.com
</VirtualHost>
<VirtualHost *:443>
SSLEngine ON
SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key
Redirect permanent / https://domain.com
</VirtualHost>
答案1
您可以创建一个默认虚拟主机,ServerName
而无需重定向到任何特定的虚拟主机。据我所知,这就是您想要的。Apache 默认使用配置文件中找到的第一个指令,因此直接将-less 虚拟主机放入(或在您的系统上调用的任何内容)VirtualHost
就足够了。ServerName
httpd.conf
答案2
在命名的 VirtualHost 中:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
SSLEngine On
###other directives below
</VirtualHost>
这将始终/强制将用户从http://example.com到https://example.com。
如果您希望用户可以选择使用 HTTP 或 HTTPS,请同时提供两种配置。不要重定向。
<VirtualHost *:80>
ServerName example.com
###other directives below
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
SSLEngine On
###other directives below
</VirtualHost>
对于基于 IP 的配置,如果您仅在端口 80 上运行一个站点,在端口 443 上运行一个站点,则上述设置仍然有效。
<VirtualHost 192.168.1.100:80>
###other directives below
</VirtualHost>
<VirtualHost 192.168.1.100:443>
SSLEngine On
###other directives below
</VirtualHost>