我负责运行一些常规网站和一些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
有没有提示/良好做法做这样的工作? 由于这个“问题”涉及很多网站,因此解决方案可能是通用的。
答案 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被抛出。祝你好运!