2011-07-08 10 views
0

私は1台のマシン上で実行されているいくつかの仮想ホストを持っている、と私は別の上に1つの仮想ホストから一つのパスを上書きしたいと思いはあります。私の元々の計画はmodリライトを使用することでしたが、私は絶対URLに固執しました。別の仮想ホストへのapache2でのパスをリダイレクトする方法

私は(301のリダイレクトを使用せず。)、次のように動作したいと思います:

http://sub1.example.com/sub2 -> sub2.example.com virtual host 
# Everything but sub2/.* 
http://sub1.example.com/  -> sub1.example.com virtual host 
http://sub2.example.com/  -> sub2.example.com virtual host 

私は次のような構成でこれをテストしていた:私は、Python WSGIアプリケーションを実行しています

<VirtualHost *:80> 
    <Directory /var/lib/wsgi> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    ServerName sub1.example.com 
    WSGIScriptAlias//var/lib/wsgi/sub1.wsgi 
    WSGIDaemonProcess sub1 display-name=%{GROUP} 
    WSGIProcessGroup sub1 

    RewriteEngine on 
    RewriteRule ^/sub2/(.*)$ http://sub2.example.com/sub2/$1 [PT] 

</VirtualHost> 

<VirtualHost *:80> 
    <Directory /var/lib/wsgi> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    ServerName sub2.example.com 
    WSGIScriptAlias//var/lib/wsgi/sub2.wsgi 
    WSGIDaemonProcess sub2 display-name=%{GROUP} 
    WSGIProcessGroup sub2 
</VirtualHost> 

各サブドメインでhttp://sub1.example.com/sub2にアクセスすると、apache2は "400 Bad Request"を返し、これをログファイルに書き込みます。

[Fri Jul 08 16:09:05 2011] [error] [client 127.0.0.1] Invalid URI in request GET /sub2/ HTTP/1.1 

私はまた、SUB2ドメインの内部ServerPathを使用してみましたが、それはまた、動作しません。

答えて

1

あなたが任意のURLの変更/空想のマッチングを行っていない場合、その理由

<VirtualHost ...> 
    // sub1 site 
    Redirect /sub2 http://sub2.example.com 
</VirtualHost> 

mod_rewriteのは、あなたが本当に必要なのは豆鉄砲で重砲でしようとしません。

Alias /sub2 /full/path/to/equivalent/directory/in/sub2 
+0

リダイレクトは、別のサイトにクライアントを送信します:エイリアスを使用するか、または

。私はsub1からサイトにアクセスしているクライアントからsub2仮想ホストを非表示にしたいと思います。エイリアスはディスク上のパスに対してのみ機能し、ホスト名を変更することはできません。 – user835673

+0

次に、エイリアスを使用すると、sub1サイトの/ sub2の下でsub2サイトのコンテンツを利用できるようになります。 –

+1

私が読んだことから、別名を使って別の仮想ホストにトラフィックを誘導することはできません。これは、sub2が静的ファイルを提供していても、WSGIスクリプトを実行している場合に機能します。 – user835673

関連する問題