Ubuntu 14.04 Apache 2.4.18
我已经使用 letsencrypt 设置了 SSL 证书。它运行良好,但为了正常工作,我无法在一个虚拟主机配置文件中定义多个 vhost。每个 vhost 都必须位于 /etc/apache2/sites-available 中的自己的 .conf 文件中。
我需要确保所有对 www.example.com 的请求都重定向到 example.com。由于我需要在唯一的虚拟主机文件中解决这个问题,我尝试在其中包含重写规则来执行重定向,但到目前为止它失败了:全部https://www.example.com请求不会被重定向到https://example.com并显示“不安全网站”警告。
这是 domain.com-le-ssl.conf 的虚拟主机配置文件。
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]
DocumentRoot /home/user_account/www/example.com/public
<Directory /home/user_account/www/example.com/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/home/user_account/www/example.com/public/$1
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
答案1
由于您的 SSL 证书对 www.example.com 无效,因此当有人使用 www.example.com 访问您的网站时,他们会收到证书警告。无论他们是否收到重定向,都会发生这种情况。否则,就可以创建到任何网站的重定向,并且看起来是可信的。
您需要做的是获取涵盖 www.example.com 和 example.com 的证书,或者为 www.example.com 设置一个具有有效证书的单独虚拟主机,然后将重定向放在该虚拟主机中。
答案2
- 您不能在启用 SSL 的虚拟主机内包含重定向 http -> https 规则。从设计上来说您不能这样做。只能接受它。您需要一个纯 HTTP 虚拟主机来执行从 HTTP 的重定向(这是您的主要错误)。
- 实际上,在基于 Debian 的 Linux 中,您可以在配置目录中放置任何配置文件。您甚至可以删除教条且不舒服的
sites-*
目录并开始使用vhost.d
目录,就像我一样。没有人可以强迫您使用不舒服的东西。