我想转发所有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永久。