如何让apache在http和https之间自动切换

时间:2014-12-19 14:37:58

标签: apache redirect https virtualhost

我负责运行一些常规网站和一些SSL网站的Apache Web服务器。所有这些网站都是供公司内部使用的。所有网站都使用VirtualHost指令。 所以我有

- http://siteA.mycompany
- http://siteB.mycompany
- http://siteC.mycompany
- https://siteD.mycompany
- https://siteE.mycompany

一切运行良好且顺利但一些用户抱怨我们他们无法访问这些网站,因为有时他们必须键入http,有时他们必须键入https ...(管理员的工作有时很难)。

我正在寻找一种方法来解决这个问题:如果请求带有http协议,那么定义为使用https请求的网站必须重定向。反向执行相同的工作(https到http)。

解释我在寻找什么的另一种方式:

* user request http://siteD.mycompany
* but website is define as using https protocol
* user's web browser change his request to https://siteD.mycompany
* user is no more bothered anymore by the bad protocol problem

有没有提示/良好做法做这样的工作? 由于这个“问题”涉及很多网站,因此解决方案可能是通用的。

1 个答案:

答案 0 :(得分:0)

请参阅此Wiki文章here
您需要为每个虚拟主机配置提供这些规则。考虑https://siteD.mycompany的示例,如果访问https,您需要在重写规则下方将用户重定向到您网站的http版本。

<VirtualHost *:80 *:443>
ServerName siteD.mycompany
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

http://siteA.mycompany应用相同的逻辑,可以使用以下规则。

<VirtualHost *:80 *:443>
ServerName siteD.mycompany
RewriteEngine on
RewriteCond %{HTTPS} =on
RewriteRule ^/?(.*) http://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>

要使这些规则起作用,您必须确保虚拟主机配置通过端口80和443接受连接。目前,您可能有严格的端口配置,因为当您访问https://siteD.mycompany时, 404被抛出。祝你好运!