Apache では、特定の URL 用に 1 つの VirtualHost、他のすべての URL 用に別の VirtualHost を使用します。

Apache では、特定の URL 用に 1 つの VirtualHost、他のすべての URL 用に別の VirtualHost を使用します。

特定のパス (完全なドメインではなく、ローカル パスのみ) が 1 つの仮想ホストに誘導され、他のパスがデフォルトで別の仮想ホストに誘導されるように、同じ IP アドレス、同じポートでリッスンする異なる仮想ホストを持つように Apache を構成することは可能ですか?

例えば:

#All requests to www.mysite.com/special-url go here

<VirtualHost /special-url:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server1"
  <Directory "/home/me/server1">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

#All other requests go here

<VirtualHost *:80>
  DefaultType application/x-httpd-php
  ServerName server1
  Document Root "/home/me/server2"
  <Directory "/home/me/server2">
    AllowOverride None
    Order allow, deny
    allow from all
  </Directory>
</VirtualHost>

このサーバー構成は機能せず、最初のVirtualHostタグにワイルドカードの組み合わせを追加しても機能しません (例: VirtualHost */special-url:80)。代わりに、これを実行すると、Apache は へのリクエストを に送信します。ただし、/special-url/home/me/server1検索すると、 にというディレクトリがあっても、/fooでそのディレクトリを検索server1して返します。404foo/home/me/server2

特定の URL 専用の VirtualHost を 1 つ用意し、他のすべての URL 用に別の VirtualHost を用意する方法はありますか?

答え1

それはそうではありません。仮想ホストはパスではなく、IP アドレスまたはホスト名に基づいています。ただし、同じ目的を達成するために実行できる他の方法がいくつかあります。

  • 仮想ホストに別のホスト名がある場合はserver1、リダイレクトが可能です。
  • そのURLの別のパスからコンテンツを提供したいだけなら、AliasMatchそのパスをマッピングするために
  • mod_rewrite仕様に応じてURLを書き換えるために使用できます

あなたが何を達成したいのかを詳しく知らないので、これ以上具体的に言うことはできません。しかし、私はURLをファイルシステムにマッピングするApacheのドキュメント良い出発点となるでしょう。

答え2

これは Apache のプロキシ モジュールの仕事になると思われます。

ProxyPass ディレクティブを確認してください:

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass

答え3

仮想ホストは、リクエストのドメイン部分を処理して、同じサーバー上で複数のドメインをホストできるようにします。

エイリアスや書き換えで何かできるかもしれません。あるいは、さまざまな URL をアプリに組み込んで、アプリで処理させることもできます。

関連情報