禁用Apache的虚拟主机的IP,但不是(子)域

我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>