将http和https请求redirect到新主机

Apache 2.4.6中,我想将请求从http://A.org/foohttps://A.org/fooredirecthttps://B.org/foo

我正在使用以下指令:

 <VirtualHost 1.2.3.4:80> ServerName B.org ServerAlias A.org RewriteEngine on RewriteCond %{HTTP_HOST} !^B.org$ RewriteRule ^/(.*)$ https://B.org/$1 [R=permanent,L] </VirtualHost> <VirtualHost 1.2.3.4:443> ServerName B.org ServerAlias A.org RewriteEngine on RewriteCond %{SERVER_PORT} ^443(s) RewriteCond %{HTTP_HOST} !^B.org$ RewriteRule ^/(.*)$ https://B.org/$1 [R=permanent,L] </VirtualHost> 

当我访问http://A.org/foo ,它redirect到https://B.org/foo (正确)。

当我访问https://A.org/foo ,会加载https://B.org/foo但不会重写URL。 所以我从Web浏览器得到一个SSL证书域不匹配的错误。

第二个VirtualHost指令有什么问题会阻止URL被重写吗?

必须验证SSL证书才能发出重定向,因此您需要使用在https://A.org/发出重定向的VirtualHost内对“A.org”有效的证书,以及将其与VirtualHost服务https://B.org/分开。

线路检查服务器端口是没有必要的,因为VirtualHost无论如何只服务于那个端口。 只要删除它。

这里的规则也略微调整了审美的大纲,你可能会也可能不喜欢!

 <VirtualHost 1.2.3.4:80> serverName B.org serverAlias A.org RewriteEngine on RewriteCond %{HTTP_HOST} !=B.org RewriteRule ^(.*)$ https://B.org$1 [R=permanent,L] </VirtualHost> <VirtualHost 1.2.3.4:443> serverName A.org RewriteEngine on RewriteRule ^(.*)$ https://B.org$1 [R=permanent,L] </VirtualHost> <VirtualHost 1.2.3.4:443> serverName B.org </VirtualHost>