我有几个由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不工作与名称虚拟主机..请参阅: