2017-01-23 7 views
2

Apache 2.4.6では、http://A.org/foohttps://A.org/fooからhttps://B.org/fooにリクエストをリダイレクトしたいと思います。httpとhttpsの両方のリクエストを新しいホストにリダイレクトする

私は、次のディレクティブを使用しています:私はhttp://A.org/fooにアクセスすると、これはhttps://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> 

https://A.org/fooにアクセスすると、https://B.org/fooがロードされますが、URLは書き換えられません。そのため、WebブラウザからSSL証明書ドメインの不一致エラーが発生します。

VirtualHostディレクティブにURLが書き換えられないようにする何か問題がありますか?

+0

'RewriteCond%{SERVER_PORT}^443(s)'行をコメントアウトし、ブラウザのキャッシュをクリアした後に再テストします。 – anubhava

+0

私は同じ動作をします。 –

答えて

0

リダイレクトを発行する前に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> 
関連する問題