我有一个包含子域名的网站,我已经安装了SSL证书,我希望将HTTP请求重定向到HTTPS,但我不希望子域名被重定向到HTTPS,除了一对: app.example.com 和 api.example.com 必须是HTTPS。
我已经设置了下面的代码,但是它不处理子域,我的子域当前正在重定向到根域的HTTPS版本。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.io
ServerAlias *.example.io
Redirect permanent / https://example.io/
</VirtualHost>
<VirtualHost _default_:443>
...
我该怎么做?
编辑:更具体一点。 我怎么能......?
感谢。
答案 0 :(得分:1)
使用mod_rewrite可以很容易地做到这一点。
RewriteCond %{HTTPS} =off
RewriteCond %{HTTP_HOST} "^(((app|api)\.)?example\.com)$"
RewriteRule ^/(.*)$ https://%1/$1 [R,L]
第一个条件确保仅针对非HTTPS请求触发规则。如果您将规则放在端口80 vhost中并且只接受该端口上的非HTTPS请求,则可以省略此项。
第二个条件检查HOST标头以确保它的example.com,app.example.com或api.example.com。
规则本身会向HTTPS对应方发出重定向。 %1是对完整HOST头内容的反向引用(%0也可以在这里工作,允许你省略一些parens),$ 1是对路径的反向引用(减去前导斜杠)。
注意:您也可以使用if directive来限制重定向。