我想将所有流量转发到 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
标志以使重定向永久生效。