转发到https保持URL完整/完整

我想转发所有stream量到https。 在URL中可以有子域名和子域名保持不变。 例:

http://subdomain.myDomain.me -> https://subdomain.myDomain.me http://myDomain.me/subpath -> https://myDomain.me/subpath http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath 

我在这个整齐的评估器 (从这里链接)中使用以下代码尝试的例子:

 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https:/$1 

在评估者中,一切都很好。 真正的虚拟主机是这样的:

 <virtualHost *:80> ServerName myDomain.me RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https:/$1 </VirtualHost> 

当试图访问真实网站时,发生这种情况:

 http://subdomain.myDomain.me -> http://subdomain.myDomain.me # fail - no https http://myDomain.me/subpath -> https://myDomain.mesubpath # fail - subpath appended to top-level domain http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath # success 

这个重写有什么问题?

正确的规则如下。

 RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 

但是,这不是推荐的将HTTP请求redirect到HTTPS的方法。 首选方法是在Apache confit中使用redirect指向启用SSL的站点。

您可以在Apache Httpd wiki上更多地了解首选方法。

 RewriteEngine On #RewriteCond %{HTTPS} off # you can skip this if you want to redirect everything RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC] 

如果这不起作用尝试:

 RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L,NC] 

不要忘记发送R=301标志,使redirect永久。