我试图将http重定向到https。 我找到了很多答案,但对我来说没什么用。 我不知道为什么,也许它的apache2配置错误? 我也在.htaccess中尝试它,也没有任何事情发生。
就是这个错误:
错误请求 您的浏览器发送了此服务器无法理解的请求。 原因:您正在向支持SSL的服务器端口说明HTTP。 请使用HTTPS方案访问此URL。
这是我的虚拟主机文件。
#Redirect HTTP TO HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/%$1 [R,L]
#VHOSTS
<VirtualHost *:443>
Servername www.latoya.eu
ServerAlias latoya.eu www.latoya.eu
Documentroot /var/www/latoya
ErrorLog /path/to/log/error.log
CustomLog /path/to/log/access.log combined
SSLEngine on
SSLCertificateFile /path/to/ssl/files/pem.crt
SSLCertificateKeyFile /path/to/ssl/files/private.key
SSLCertificateChainFile /path/to/ssl/files/pem.ca-bundle
</VirtualHost>
<VirtualHost *:443>
Servername board.latoya.eu
Documentroot /var/www/latoya
ErrorLog /path/to/log/error.log
CustomLog /path/to/log/access.log combined
SSLEngine on
SSLCertificateFile /path/to/ssl/files/pem.crt
SSLCertificateKeyFile /path/to/ssl/files/private.key
SSLCertificateChainFile /path/to/ssl/files/pem.ca-bundle
</VirtualHost>
<VirtualHost *:443 *:80>
Servername secure.latoya.eu
Documentroot /var/www/latoya
ErrorLog /path/to/log/error.log
CustomLog /path/to/log/access.log combined
SSLEngine on
SSLCertificateFile /path/to/ssl/files/pem.crt
SSLCertificateKeyFile /path/to/ssl/files/private.key
SSLCertificateChainFile /path/to/ssl/files/pem.ca-bundle
</VirtualHost>
<VirtualHost *:80 *:443>
Servername static.kritzelpixel.com
Documentroot /var/www/static.kritzelpixel.com
ErrorLog /path/to/log/error.log
CustomLog /path/to/log/access.log combined
SSLCertificateFile /path/to/ssl/files/pem.crt
SSLCertificateKeyFile /path/to/ssl/files/private.key
SSLCertificateChainFile /path/to/ssl/files/pem.ca-bundle
</VirtualHost>
答案 0 :(得分:1)
在同一个虚拟主机标签中使用“VirtualHost *:80 *:443”或相反的内容是完全错误的,因为一个虚拟主机不能是SSL而不是同时是SSL。
事实上,Apache HTTPD并没有因此而痛苦地尖叫,因为你“可以”在同一个虚拟主机中使用不同的端口,但这当然不是设计为一起拥有SSL端口和非SSL端口。
所以我的建议是你纠正你的配置以使其看起来更健全,即分别拥有特定的虚拟主机*:80和虚拟主机*:443。
在VirtualHost *:80条目中,您可以使用您的案例的特定主机名重定向/ https://example.com/,将一行重定向从80到443,而无需使用mod_rewrite。
要重定向到SSL,不需要mod_rewrite并且过度杀伤。
简言之:
<VirtualHost *:80>
ServerName example.com
Redirect / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
SSLEngine on
#other directives here
</VirtualHost>
如果它们具有不同的配置,则与其他名称相同。