Apache VirtualHost,多个站点。1 个带重定向的 SSL 和 1 个常规 http

Apache VirtualHost,多个站点。1 个带重定向的 SSL 和 1 个常规 http

我有一个带有一个站点的服务器,我通过该站点重定向到 https

<虚拟主机 *:80>
     DocumentRoot /var/www/html/secure
     服务器名称 secure.com
     重定向 / https://secure.com
</虚拟主机>

那样没问题。

现在我正尝试添加另一个不安全的网站

<虚拟主机 *:80>
    DocumentRoot /var/www/html/notsecure
    服务器名称 notsecure.com
</虚拟主机>

当然,因为重定向是在“/”,所以所有网站都会被重定向。我尝试将重定向更改为完整的文档根目录,但没有成功。

答案1

如果您启用了 NameVirtualHost,则必须使用 IP。如果您正在运行 SSL,或者在不同的 IP 地址上运行 VirtualHosts,则需要 NameVirtualHost。

<VirtualHost 172.16.4.1:80>
     DocumentRoot /var/www/html/secure
     ServerName secure.com
     Redirect / https://secure.com
</VirtualHost>

<VirtualHost 17.16.4.1:80>
    DocumentRoot /var/www/html/notsecure
    ServerName notsecure.com
</VirtualHost>

答案2

嗯,你需要声明这一点(最好在 httpd.conf/apache2.conf 中),这很重要!不要使用星号“*”

NameVirtualHost IP_or_hostname:80
NameVirtualHost IP_or_hostname:443

在您的虚拟主机中:

<VirtualHost IP_or_hostname:443>
        ServerName whateveryouwant
        DocumentRoot /www/blahblah/

        SSLEngine on
        SSLCertificateKeyFile /etc/apache2/ssl/blahblah.key
        SSLCertificateFile /etc/apache2/ssl/blahblah.crt
        SSLProtocol all
        SSLCipherSuite HIGH:MEDIUM

        ErrorLog /var/log/apache2/error.log

</VirtualHost>

<VirtualHost IP_or_hostname:80>
        ServerName whateveryouwant
        DocumentRoot /www/blahblah

        ErrorLog /var/log/apache2/error.log

        LogLevel warn
        ServerSignature Off

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^blahblahblah$ [NC]
        RewriteRule ^/(.*) https://blahblahblah/$1 [R=301,L]

</VirtualHost>

答案3

使用 mod_rewrite:

你的配置文件看起来应该是这样的:

 <VirtualHost *:80> 
 DocumentRoot /var/www/html/secure
 ServerName secure.com

 RewriteEngine On  
 RewriteCond %{HTTPS} off  
 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}`

</VirtualHost>

答案4

尝试以下配置:

NameVirtualHost *:80
NameVirtualHost *:443

# default virtual host
<VirtualHost *:80>
    ServerName _default_
    DocumentRoot /var/www/html/default
</VirtualHost>

<VirtualHost *:80>
    ServerName secure.com
    DocumentRoot /var/www/html/secure
    RedirectPermanent / https://secure.com
</VirtualHost>

<VirtualHost *:443>
    ServerName secure.com
    DocumentRoot /var/www/html/secure
    SSLEngine on
    # other SSL related directives
</VirtualHost>

<VirtualHost *:80>
    ServerName notsecure.com
    DocumentRoot /var/www/html/notsecure
</VirtualHost>

你还应该看看VirtualHost 示例在 Apache httpd 文档中。

相关内容