使用基于名称的虚拟主机强制SSL(可能使用.htaccess)

我有几个由Apache使用基于名称的虚拟主机服务的子域名。 它build立的方式是我有一个目录,其中包含所有网站的页面,但是可以使用多个子域(每个客户具有不同主题的Web应用程序)访问。 对于每个子域我有一个符号链接到主dir,它匹配基于名称的虚拟主机映射。 所以我只是在我的PHP脚本中使用$ _SERVER ['HTTP_HOST']来确定要提供哪个主题,但代码库是相同的。 问题是这些网站需要SSL,我很难弄清楚如何强制这样做。

我已经看到.htaccess的这个例子:

RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

但麻烦的是,它要求您对www.example.com域进行硬编码。 我怎样才能使SSL版本的域名实际被请求,而不是硬编码呢?

我已经看到{HTTP_HOST}variables在.htaccess的RewriteCond部分中使用,但是当我尝试在RewriteRule使用它时似乎不起作用。 试了下面,它给了我一个500错误:

 RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://{HTTP_HOST}/$1 [R,L] 

在replacestring中使用这些相同的条件variables的能力使得这是一个简单的修复。

更改

 RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

 RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L] 

Apache的SSL不工作与名称虚拟主机..请参阅:

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI