由于通配符 SSL,我需要重写 https://domain.com => https://www.domain.com

Sno*_*rri 5 mod-rewrite ssl-certificate apache-2.2

就像主题说我需要重写https://domain.com=> https://www.domain.com。但是我为域设置了通配符 SSL,根域与 *.domain.com 不匹配,因此浏览器出现错误

domain.com 使用了无效的安全证书。

该证书仅对 *.domain.com 有效

这是我当前的 vhost 配置

<VirtualHost 127.0.0.1:443>
        ServerAdmin user@domain.com
        DocumentRoot /usr/local/app/domain/webapps/www
        JkMount /* somestuff
        ServerName domain. com
        ServerAlias www.domain.com 
        ErrorLog logs/domain.com-error_log
        CustomLog logs/domain.com-access_log combined
        Customlog logs/domain.com-deflate_log deflate
        RewriteEngine on
        RewriteCond %{HTTP_HOST}   ^domain\.com [NC]
        RewriteRule ^/?(.*)         https://www.domain.com/$1 [L,R,NE]
        SSLEngine on
        SSLCertificateFile /etc/httpd/conf/ssl.crt/x.domain.com.crt
        SSLCertificateKeyFile /etc/httpd/conf/ssl.key/x.domain.com.key

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我希望在加载 SSL 之前 RewriteEngine 会启动但不起作用。这是否可以在不获得仅用于根域的新证书的情况下解决?

Dav*_*ett 6

不幸的是,客户端正在与之交谈的名称是由客户端而不是服务器根据证书进行检查的。就客户端而言,它正在与 domain.com 对话,而不是 <something>.domain.com - 它不会意识到在服务器端进行的任何 URL 重写。

因此,您需要为另一个名称提供额外的证书以避免证书错误。

  • 有人可能会争辩说,客户检查自己是相当“幸运”的,而不是不幸的。如果重定向可以在 SSL 协商之前发生,流量显然不会被加密,中间的人可以将客户端重定向到他们想要的任何地方。这个额外的证书通常要花钱,这是不幸的:) (2认同)