如何才能让我的 https:// URL 在带有和不带有“www”的情况下都能正常工作?

如何才能让我的 https:// URL 在带有和不带有“www”的情况下都能正常工作?

我以为我已经正确设置了 ssl,但是我发现了一个问题。

这部分还可以:ssldomain.com转至https://ssldomain.com

但这不起作用:www.ssldomain.com将转到http://anotherdomain.com,而这恰好是机器上的第一个虚拟主机。换句话说,我有一个非 SSL 虚拟主机在该服务器上运行,并且www.ssldomain.com正在反弹到该虚拟主机。

我用了此实用程序并验证我的 Commodo“PositiveSSL”证书是否涵盖带有和不带有“www”的域名。

我正在使用 Apache 2.2.3-65。

这是我的配置/etc/httpd/conf.d/ssl.conf...

<VirtualHost *:443>
    ServerName www.ssldomain.com
    ServerAlias ssldomain.com
    DocumentRoot "/opt/deployed_rails_apps/ssl_site/current/public"

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/www.ssldomain.com.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/www.ssldomain.com.pem
    SSLCACertificateFile /etc/pki/tls/certs/www.ssldomain.com.ca-bundle
    SSLHonorCipherOrder On
    SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
    SSLProtocol all -SSLv2
    Header add Strict-Transport-Security "max-age=15768000"

    ErrorLog "logs/ssldomain.com-ssl-error_log"
    CustomLog "logs/ssldomain.com-ssl-access_log" common
    CustomLog "logs/ssldomain.com-ssl-deflate_log" deflate
    <Directory "/opt/deployed_rails_apps/rock_pebble/current/public">
        Options -MultiViews FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</Virtualhost>

# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  ssldomain.com (/etc/httpd/conf.d/ssl.conf:230)
*:80                   is a NameVirtualHost
         default server anotherdomain.com (/etc/httpd/conf/httpd.conf:232)
         port 80 namevhost anotherdomain.com (/etc/httpd/conf/httpd.conf:232)
Syntax OK

答案1

您无法在 DNS 级别进行重定向,但您可以轻松地在端口 80 上配置另一个虚拟主机来处理重定向。

<VirtualHost *:80>
    ServerName www.ssldomain.com
    ServerAlias ssldomain.com
    # .. logging, anything else you need ..
    Redirect permanent / https://ssldomain.com/
</VirtualHost>

答案2

好的,谢谢大家的帮助。我想我已经搞清楚了。我在 httpd.conf 中设置了一个非 SSL 虚拟主机,并在 ssl.conf 中设置了一个 SSL 虚拟主机,如我的问题中所述。

非 SSL 虚拟主机有这个...

ServerName www.ssldomain.com
ServerAlias ssldomain.com

并且 SSL vhost 只有这个……

ServerName www.ssldomain.com

在我的应用程序代码中,我强制所有流量转到相应的httpsURL。现在,URL 可以解析带“www”和不带“www”的内容,并且所有内容都通过 SSL 提供。

相关内容