所以我有一个运行 Apache 2 的 Ubuntu 服务器,并希望将所有流量重定向到 https。以下是 sites-available 配置文件(已替换域名)。
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent "/" "https://example.com/"
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /var/www/personal/html/
ServerName https://example.com
ServerAlias https://www.example.com
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
<Directory /var/www/personal/html/>
Options +FollowSymlinks
AllowOverride All
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/personal/html
SetEnv HTTP_HOME /var/www/personal/html
</Directory>
ErrorLog ${APACHE_LOG_DIR}/personal-error.log
CustomLog ${APACHE_LOG_DIR}/personal-access.log combined
ServerAlias example.com
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
https://example.com确实有效并且已加密。如何重写配置以将所有流量重定向到 https?
答案1
您的问题已经有了答案:这可以实现您想要实现的目标:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent "/" "https://example.com/"
</VirtualHost>
然而,ServerName
https://example.com
是错误的:你不应该在这里或在你的ServerAlias
。这是<VirtualHost *:443>
一个使它成为 HTTPS 虚拟主机的指令。如果您曾经https://example.com
使用此配置,可能是因为您ServerAlias example.com
在配置中也使用了该指令,但您也不应该在同一个<VirtualHost>
块中两次指定这些指令。
这让我怀疑这个sites-available
配置文件是否曾经是用户的,即
- 您是否已启用它(使用
a2ensite
或通过手动创建符号链接sites-enabled
)? - 修改之后,您是否重新启动了 Apache?
(顺便说一句,由于http://www.example.com
重定向到规范https://example.com/
,因此重定向https://www.example.com/
到同一位置也可能是一个好主意。)