我configuration了一个域名和两个子域名,并redirect到相应的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>
现在,我做一些testing:
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/
大。 最后一个testing,只使用IP(abcd):
curl http://abcd/ gives me the redirect to https://a.domain.com/
它需要从域a.domain.comredirect。
如果用户请求http://abcd/ ?,是否有任何更改来取消HTTP / HTTPS? 目前,我添加了一个redirect到主域,其中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>
您可以在不使用ServerName的情况下创build默认的虚拟主机,而不必redirect到任何特定的虚拟主机。 据我所知,这是你想要的。 如果Apache在configuration文件中find了第一个VirtualHost指令,Apache会默认使用这个指令,所以将一个ServerName free虚拟主机直接放入httpd.conf (或者在你的系统上调用的任何东西)就足够了。
在一个命名的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.comredirect到https://example.com 。
如果您希望用户可以select使用HTTP或HTTPS,则可以使用这两种configuration。 不要redirect。
<VirtualHost *:80> ServerName example.com ###other directives below </VirtualHost> <VirtualHost *:443> ServerName example.com SSLEngine On ###other directives below </VirtualHost>
对于基于IP的configuration,如果您只是在端口80上运行一个站点,而在443中运行一个站点,上述设置仍然可以工作。
<VirtualHost 192.168.1.100:80> ###other directives below </VirtualHost> <VirtualHost 192.168.1.100:443> SSLEngine On ###other directives below </VirtualHost>