在没有ServerName的默认虚拟主机上将HTTPredirect到HTTPS
在我的apache服务器上,我希望能够将所有传入的http请求redirect到相应的https请求。 问题是,我希望能够在没有指定ServerName情况下为我的默认虚拟主机执行此操作,并将redirect与请求url中出现的任何服务器名称一起使用。 我希望有这样的事情: 
 NameVirtualHost *:80 <VirtualHost *:80> RedirectPermanent / https://%{SERVER_NAME}/ ... </VirtualHost> 
 这可能使用Redirect或我将不得不求助于Rewrite ? 
尝试添加这个在你的虚拟主机configuration:
 RewriteEngine On RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] 
 两者都很好。 但根据Apache文档,您应该避免使用mod_rewrite进行简单的redirect,而是使用Redirect 。 所以根据他们,你最好做: 
 <VirtualHost *:80> ServerName www.example.com Redirect / https://www.example.com/ </VirtualHost> <VirtualHost *:443> ServerName www.example.com # ... SSL configuration goes here </VirtualHost> 
 第一个/ Redirect之后是url,第二个部分是它应该被redirect的地方。 
 您也可以使用它将urlredirect到一个子域名: Redirect /one/ http://one.example.com/ 
这也是省略不必要的redirect的完整方法;)
这些规则旨在用在.htaccess文件中,因为*:80 VirtualHost条目中的RewriteRule不需要条件。
 RewriteEngine on RewriteCond %{HTTPS} off [OR] RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L] 
计划 :
 RewriteEngine on 
==>启用引擎
 RewriteCond %{HTTPS} off [OR] 
==>匹配非https连接,或者(不设置[OR]会导致隐式的AND!)
 RewriteCond %{HTTP:X-Forwarded-Proto} !https 
==>匹配转发连接(代理,负载均衡等) 没有 https
 RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L] 
==>如果这两个条件中的一个匹配,则重写整个URL,发送一个301来让客户端(有些做,有些不知道)学习这个,最后一个规则是L.