将HTTP流量发送到多个域的HTTPS

时间:2018-11-08 14:42:10

标签: javascript php

我有这个index.php文件将http流量重定向到服务器的https端。其中包含以下代码:

<?php
        echo "<script> location.href='https://domain1.com'; </script>";
        exit;
?>

当服务器上有一个域时,它可以正常工作。现在我有多个:

domain2.com
domain3.com
domain4.com
etc...

如何告诉脚本将各个域重定向到https,而不是始终自动路由到domain1.com

谢谢!

更新1:面向那些询问文件夹的人。 http站点是/var/www/html,而https站点是/var/www/vhosts/domain1.com/。第二个是真实站点。

1 个答案:

答案 0 :(得分:1)

如果您已经在Apache的 httpd-vhosts.conf 文件中配置域,则只需在端口80上设置<VirtualHost>即可重定向到相关的https域。

例如:

<VirtualHost *:80>
ServerName www.domain1.com
Redirect / https://www.domain1.com
</VirtualHost>

<VirtualHost _default_:443>
ServerName www.domain1.com
DocumentRoot /var/www/vhosts/domain1.com

SSLEngine On
... and so on ...
</VirtualHost>

<VirtualHost *:80>
ServerName www.domain2.com
Redirect / https://www.domain2.com
</VirtualHost>

<VirtualHost _default_:443>
ServerName www.domain2.com
DocumentRoot /var/www/vhosts/domain2.com

SSLEngine On
... and so on ...
</VirtualHost>


下一个最佳选择是通过文档根目录下的.htaccess(对于您为/var/www/html)进行操作-

RewriteEngine On
RewriteCond %{HTTPS} Off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


如果所有其他方法均失败,则可以使用header()函数在PHP中使用http标头重定向来完成此操作-像这样:

<?php
if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off') {
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    die();
}

对于您的示例,该名称为/var/www/html/index.php


注意:由于您对HTTP和HTTPS使用了不同的文档根目录,因此可以省去HTTPS检查。无论如何,您只会在HTTP下点击/var/www/html

相关问题