![Apache では、特定の URL 用に 1 つの VirtualHost、他のすべての URL 用に別の VirtualHost を使用します。](https://rvso.com/image/623651/Apache%20%E3%81%A7%E3%81%AF%E3%80%81%E7%89%B9%E5%AE%9A%E3%81%AE%20URL%20%E7%94%A8%E3%81%AB%201%20%E3%81%A4%E3%81%AE%20VirtualHost%E3%80%81%E4%BB%96%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%20URL%20%E7%94%A8%E3%81%AB%E5%88%A5%E3%81%AE%20VirtualHost%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
特定のパス (完全なドメインではなく、ローカル パスのみ) が 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
して返します。404
foo
/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 をアプリに組み込んで、アプリで処理させることもできます。