我确信这已经被问过,但没有一个答案似乎为我工作。
我有一个域domain.com 。 我有一个子域sub.domain.com在相同的IP。 在这种情况下, sub.domain.com是指向domain.com的CNAMElogging。 我有这个服务器上运行的Apache。 我在sites-available / default中有一个mod_rewrite规则,将所有非ssl连接redirect到ssl:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
到目前为止,这工作正常。 如果我连接到http://domain.com/foo我使用ssl指向https://domain.com/foo 。
但是,现在我有另一个端口上运行的服务器上运行的另一个Web服务器,我想通过sub.domain.com访问。 我创build了一个将sub.domain.com指向domain.com的CNAMElogging,因此它们都具有相同的IP地址。 我可以做一个SSL连接到https://domain.com:port第二台服务器,它工作正常。
据我可以告诉mod_rewrite上面的东西不应该导致任何问题,因为如果我连接到http://sub.domain.com我应该首先被redirect到https://sub.domain.com ,然后应该得到通过代理到第二个networking服务器。
每当我尝试连接到sub.domain.com或domain.com时,我所遵循的每个博客文章教程和serverfault答案都留下了一些configuration,这些configuration会将所有内容发送到domain.com或给我ssl握手错误。
任何人都可以告诉我这样做的正确方法,并解释为什么它的作品?
我假设你的子域不在你的域名所在的虚拟主机中。 在这种情况下,将重写规则添加到默认虚拟主机根本没有任何作用; 你需要在你的子域名的vhostconfiguration文件中设置重写规则(它也应该在网站可用,如果这是你的默认的地方,但要知道这是一个debianism,而不是所有的Apache安装你遇到会是这样的)。
您对RewriteEngineconfiguration的行是正确的,并且如果复制到其他文件中也应该工作。