从HTTP重定向到HTTPS,但不是从子域重定向

时间:2016-10-16 19:28:55

标签: apache .htaccess redirect ssl https

我有一个包含子域名的网站,我已经安装了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>
...

我该怎么做?

编辑:更具体一点。 我怎么能......?

感谢。

1 个答案:

答案 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来限制重定向。

相关问题