转发到 https,保持 URL 完整

转发到 https,保持 URL 完整

我想将所有流量转发到 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

这次重写有什么问题?

答案1

正确的规则如下。

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

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

您可以访问以下网址详细了解首选方法Apache Httpd 维基

答案2

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标志以使重定向永久生效。

相关内容